如何将一本词典分配给另一本词典';Python中的s值?

如何将一本词典分配给另一本词典';Python中的s值?,python,pandas,list,dictionary,append,Python,Pandas,List,Dictionary,Append,我有两本内容相关的词典。一个是由以'shopid'为键,以'userid'为值的数据集构成的。另一个字典由相同的数据集组成,但将'userid'作为键,将该用户购买的'datetime'作为值 我想能够做的是创建一个for循环(或类似的循环),对于每个'shopid'键,该循环接受'userid'值,并将这些'userid'值转换为包含第二个字典中的'datetime'值的键。这适用于大型数据集 我知道字典对你能对它们做什么有一些限制,所以知道这是否可行或者是否有更好的方法来达到类似的结果会很好

我有两本内容相关的词典。一个是由以'shopid'键,以'userid'值的数据集构成的。另一个字典由相同的数据集组成,但将'userid'作为键,将该用户购买的'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 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']
        }
    }  
编辑:

我想要合并的实际词典如下所示:

shopid = {10159: [[[62775725, 214988798, 214988798, 214988798, 62775725, 
    62775725]]]
userid = {166840413: [[datetime.datetime(2019, 12, 29, 15, 48), 
    datetime.datetime(2019, 12, 29, 15, 48), datetime.datetime(2019, 12, 29, 
    15, 48)]]

我相信多余的方括号是使用默认dict多次创建新的缩短词典的结果,这些词典删除了不符合问题要求的值。

您可以使用dict comprehension执行此操作:

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()
            }

详细信息请参见此处:

此练习的最高目标是什么?大局是什么?您是否使用过熊猫数据框?您可能会发现它很有用。字典的限制是它们的键必须是不可变/可散列的。所以字符串、数字、字符串元组等的键是可以的。不允许将列表、迭代器或其他字典作为键。所以在这种情况下,所有键都是字符串!“你很好,只需要迭代两个字典就可以构建出你想要的一个。@Robert的总体目标是找出哪些用户在一个小时内在一家商店购买了三次以上的商品(从Kaggle那里获取的订单刷刷问题)。我最初使用数据框从csv访问数据,但在删除不符合要求的商店或用户时,我认为这是制作词典的一个好选择-可能我错了@没错,这很有道理。我刚刚编辑了我的问题,添加了我的两本词典的实际外观——多个方括号是我问题的原因吗?我使用了柯林的答案,它还给每一个购物者返回了一个空字典。如果你正在处理一个大的数据集,那么你应该考虑@罗伯特的评论,并使用一个更适合于非常大的数据集的工具。谢谢你,我相信这就是我正在寻找的。不幸的是,由于我在前面代码中组织数据的方式,我最终在字典键中列出了列表。例如,dict1.items()返回:dict_items([(10159,[[62775725,214988798,214988798,62775725,62775725]])。dict2也是如此,尽管它的值周围只有两组方括号。我想这意味着我需要重新编写以前的代码!按现在的方式打印组合的dict只会返回shopid键值,值为空{}。我发现这是因为使用了defaultdict(列表)创建我的字典。例如,shops\u dict=defaultdict(list)for shop-in-shops:shops\u dict[shop]。append(sData[shop])shops\u dict=dict(shops\u dict)。不确定如何解决这个问题,我在代码中使用了类似的for循环来缩减我的数据-欢迎任何想法!
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 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']}}
for i in combined_dict:
    print(i)
    a=combined_dict[i]
    for j in a:
        b=a[j]
        print(j)
        for k in b:
            print(k)