获取 Dictionary 的元素来创建另一个 Dictionary

take elements of dictionary to create another dictionary

提问人:user3573361 提问时间:5/1/2014 最后编辑:Nishant Nawarkhedeuser3573361 更新时间:5/1/2014 访问量:278

问:

我想用这种形式拿一本字典

a={'vladimirputin':{'milk': 2.87, 'parsley': 1.33, 'bread': 0.66},'barakobama':{'parsley': 0.76, 'sugar': 1.98, 'crisps': 1.09,'potatoes': 2.67, 'cereal': 9.21}}



d={}
p={}
a={'vladimirputin': {'milk': 2.87, 'parsley': 1.33, 'bread': 0.66}, 'barakobama':{'parsley': 0.76, 'sugar': 1.98, 'crisps': 1.09, 'potatoes': 2.67, 'cereal': 9.21}} 
for key in a:
    for product in a[key]:
        price=a[key][product]
        d[key]=price
        p[product]=d
print(p)

并将其转换为此

p={'milk': {'vladimirputin': 2.87}, 'cereal': {'barakobama': 9.21},'bread': {'vladimirputin': 0.66}, 'potatoes': {'barakobama': 2.67},'sugar': {'barakobama': 1.98}, 'parsley': {'vladimirputin': 1.33,'barakobama': 0.76}, 'crisps': {'barakobama': 1.09}}.
python 字典 键值

评论

0赞 user3573361 5/1/2014
谢谢 stackoverflow.com/users/346478/jan-vlcinsky

答:

0赞 shaktimaan 5/1/2014 #1

你可以这样做:

a = {'vladimirputin': {'milk': 2.87, 'parsley': 1.33, 'bread': 0.66}, 'barakobama':{'parsley': 0.76, 'sugar': 1.98, 'crisps': 1.09, 'potatoes': 2.67, 'cereal': 9.21}}
b = {}

for prez in a:
    for food in a[prez]:
        if food not in b:
            b[food] = {prez: a[prez][food]}
        else:
            b[food][prez] = a[prez][food]

这给出了:

{'bread': {'vladimirputin': 0.66},
 'cereal': {'barakobama': 9.21},
 'crisps': {'barakobama': 1.09},
 'milk': {'vladimirputin': 2.87},
 'parsley': {'barakobama': 0.76, 'vladimirputin': 1.33},
 'potatoes': {'barakobama': 2.67},
 'sugar': {'barakobama': 1.98}}

解释:

您的输入词典将总统姓名作为键。输出字典需要食物项作为键。a

该语句检查特定食品项是否已经是输出字典中的键。如果不是,它将创建一个新的字典作为值。就像在if food not in b'sugar': {'barakobama': 1.98}

如果该键已存在于输出字典中,它将获取该键并向其添加另一个键值对 就像在'parsley': {'barakobama': 0.76, 'vladimirputin': 1.33}

您可以通过在代码中添加 print 语句并在每个步骤中检查输出字典的值来了解如何对进度进行编码。b

评论

0赞 user3573361 5/1/2014
非常感谢你@shaktimaan,你能解释一下你这样做的目的是什么{prez: a[prez][food]}
0赞 user3573361 5/1/2014
再次感谢您的解释,您真的很有描述性,@shaktimaan
0赞 Zweedeend 5/1/2014 #2

根据上面的答案,我认为在遍历字典时使用 items() 方法更清楚一些。它更漂亮,甚至更快!

by_president = {'vladimirputin': {'milk': 2.87, 'parsley': 1.33, 'bread': 0.66}, 'barakobama':{'parsley': 0.76, 'sugar': 1.98, 'crisps': 1.09, 'potatoes': 2.67, 'cereal': 9.21}}
by_item = {}

for president, inventory in by_president.items():
    for food, price in inventory.items():
        if food not in by_item:  # Create the inner dictionary if it didn't already exist
            by_item[food] = dict()
        food_dictionary = by_item[food]  # A reference to the inner dictionary
        food_dictionary[president] = price  # Assign to the inner dictionary