如何解压缩作为字典键的元组来创建另一个字典?

时间:2019-10-27 18:02:03

标签: python dictionary tuples key

我有一本以元组为键的字典,我试图拆开元组以创建另一本字典,但结果却不令人满意。

daily_sales = {('naze', 'umuakali'): 6,('peter', 'umuorie'): 1, 
               ('eze','nekede'): 16}

我想要的是另一本类似的字典

send_to_manag = {{'village': 'naze', 'market':'umuakali', 'sales': 6},
                {'village': 'peter', 'market':'umuorie', 'sales': 1},...}

字典中的每个项目

我已经尝试过了

send_to_manag = {}
for village,market,sales in daily_sales.items():
    send_to_manag['village'] = daily_sales[0][0][0]
    send_to_manag['market'] = daily_sales[0][0][1]
    send_to_manag['sales'] = daily_sales[0][1]

它给出

KeyError: 0

4 个答案:

答案 0 :(得分:1)

仅凭dict / list的理解:

res = [{'village': t[0], 'market': t[1], 'sales': s} for t, s in daily_sales.items()]
print(res)

输出:

[{'market': 'umuakali', 'sales': 6, 'village': 'naze'},
 {'market': 'umuorie', 'sales': 1, 'village': 'peter'},
 {'market': 'nekede', 'sales': 16, 'village': 'eze'}]

答案 1 :(得分:0)

Tuples可以作为键,因为它们是不可变的。但是,它们仍然表现为普通元组-可以通过索引进行访问。即_tuple[0]代表第一个索引,_tuple[1]代表第二个索引。

您想要的第三个值是由元组键控的字典值。因此,您只是将其视为一种价值。

daily_sales = {('naze', 'umuakali'): 6,
               ('peter', 'umuorie'): 1, 
               ('eze','nekede'): 16
               }

send_to_manag = [] # Create a new list (the dict in your example output won't work, because you don't have keys associated with the sub-dicts
for k,v in daily_sales.items(): # Get key and value from each item in daily_sales
    village = k[0] # Get the first item form the key tuple
    market = k[1] # Get the second item form the key tuple
    sales = v # Sales is the value associated with the key tuple
    # Now append it to the new list
    send_to_manag.append({'village': village, 'market':market, 'sales': sales})

print(send_to_manag )

输出:

[{'village': 'naze', 'market': 'umuakali', 'sales': 6}, 
{'village': 'peter', 'market': 'umuorie', 'sales': 1}, 
{'village': 'eze', 'market': 'nekede', 'sales': 16}]

答案 2 :(得分:0)

正如我在评论中所说,词典不能用作另一本词典中的键。但是,您可以获得类似于您想要的字典的列表,如下所示:

from pprint import pprint

daily_sales = {('naze', 'umuakali'): 6,
               ('peter', 'umuorie'): 1,
               ('eze','nekede'): 16}

send_to_manag = []
for (village, market), sales in daily_sales.items():
    send_to_manag.append({'village': village, 'market': market, 'sales': sales})

pprint(send_to_manag)

打印结果:

[{'market': 'umuakali', 'sales': 6, 'village': 'naze'},
 {'market': 'umuorie', 'sales': 1, 'village': 'peter'},
 {'market': 'nekede', 'sales': 16, 'village': 'eze'}]

答案 3 :(得分:0)

send_to_management = [ { 'village': key[ 0 ], 'market': key[ 1 ], 'sales': value } for key, value in daily_sales.items() ]

>>> [{'village': 'naze', 'market': 'umuakali', 'sales': 6}, {'village': 'peter', 'market': 'umuorie', 'sales': 1}, {'village': 'eze', 'market': 'nekede', 'sales': 16}]

我不想这么说,但是您上面发布的代码对字典的工作方式了解甚少。

for village,market,sales in daily_sales.items():

也就是说,您上面的代码对字典的工作方式了解甚少。我不想太刻薄,但是仅那几行代码就存在太多错误,我无法正确讨论。

我强烈建议您进一步研究字典的工作方式-因为字典对于使用代码至关重要。

此外,生成器表达式(和正则表达式)是您的朋友。了解他们。