如何解决如何在Python中将字典分配给另一个字典的每个值?
我有两个与内容相关的词典。一个是由以 'shopid' 作为键并以 'userid'的数据集形成的> 作为值。另一个字典是由相同的数据集构成的,但是使用 '用户ID' 作为键和 'datetime ' 此用户作为值购买的商品。
我想做的是创建一个for循环(或类似的循环),对于每个“ shopid”键,它都采用“ userid”值,并将这些“ userid”值转换为包含“第二个字典中的datetime”值。这是用于大型数据集。
我了解字典对您的操作有一些限制,因此,很高兴知道这是否可能或是否有更好的方法来获得类似的结果?
以输入/输出理想为例:
dict1 = {'shopid1':['userid1','userid2','userid3']}
dict2 = {
'userid1':['2020-08-17 09:00','2020-08-18 08:30'],'userid2':['2020-08-16 11:00','2020-08-15 13:30'],'userid3':['2020-08-18 09:30','2020-08-18 10:00','2020-08-18 11:30']
}
combined_dict = {
'shopid1':{
'userid1':['2020-08-17 09:00','2020-08-18 11:30']
}
}
编辑:
我要合并的实际词典如下:
shopid = {10159: [[[62775725,214988798,62775725,62775725]]]
userid = {166840413: [[datetime.datetime(2019,12,29,15,48),datetime.datetime(2019,48)]]
我相信多余的方括号是几次使用默认字典来创建新的简短字典的产物,这些字典删除了不满足问题要求的值。
解决方法
您可以通过dict理解做到这一点:
combined_dict = {i: {j: dict2[j] for j in dict1[i]} for i in dict1}
输出:
>>> from pprint import pprint as pp
>>> pp(combined_dict)
{'shopid1': {'userid1': ['2020-08-17 09:00','2020-08-18 08:30'],'userid2': ['2020-08-16 11:00','2020-08-15 13:30'],'userid3': ['2020-08-18 09:30','2020-08-18 10:00','2020-08-18 11:30']}}
,
这对于“理解”是一个很好的例子,该“优化”比循环要快得多:
combined_dict = { k:
{u:t for (u,t) in dict2.items() if u in v}
for (k,v) in dict1.items()
}
有关详细信息,请参见此处:https://www.python.org/dev/peps/pep-0274/
,
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class PlayerController : MonoBehaviour{
public float speed;
private Rigidbody2D rb;
private Vector2 moveVelocity;
void Start(){
rb = GetComponent<Rigidbody2D>();
}
void Update(){
Vector2.moveInput = new Vector2(Input.GetAxis("Horizontal"),Input.GetAxis("Vertical"));
moveVelocity = moveInput.normalized * speed;
}
void FixedUpdate(){
rb.MovePosition(rb.position + moveVelocity * Time.fixedDeltaTime);
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。