从列表中用Python中的有序字典中的列表压缩项目

问题描述:

我有一个给定的有序字典和一个给定的列表具有相同的长度。从列表中用Python中的有序字典中的列表压缩项目

given_dict = OrderedDict([('one', ['-', '-']), ('two', ['-', '-'])]) 
given_list = ['a', 'b'] 

现在我想从列表中压缩的每个项目从字典中的每个列表来得到这样的:

new_dict = {'one': ['-', '-', 'a'], 'two': ['-', '-', 'b']} 

任何想法?

+0

这里有一些错误,首先,不要使用'dict'或'list'作为名字,他们是Python内置函数的影子名称。此外,字典需要像'{'key':'value'}',** NOT **'{'key'='value'}'。然后,Python字典是** UNORDERED **这意味着使用** zip **根本没有意义 – Anzel

+0

@Anzel我修改了我的帖子。我希望现在更清楚。感谢您的建议。 – ericMTR

制作一个循环ove given_dict.items()并添加您的值的given_list的元素!

>>> given_dict = OrderedDict((j[0],j[1]+[given_list[i]]) for i,j in enumerate(given_dict.items())) 
>>> given_dict 
OrderedDict([('one', ['-', '-', 'a']), ('two', ['-', '-', 'b'])]) 

,或者如果你想给一个字典,只需要使用dict代替``

>>> given_dict = dict((j[0],j[1]+[given_list[i]]) for i,j in enumerate(given_dict.items())) 
>>> given_dict 
{'two': ['-', '-', 'b'], 'one': ['-', '-', 'a']} 

这里有一种方法:

In [13]: given_dict = OrderedDict([('one', ['-', '-']), ('two', ['-', '-'])]) 

In [14]: given_list = ['a', 'b'] 

In [15]: {k: di + [li] for ((k, di), li) in zip(given_dict.items(), given_list)} 
Out[15]: {'one': ['-', '-', 'a'], 'two': ['-', '-', 'b']} 
+0

upvote +1坚持OP的要求,并有目的地使用'zip'。 – Anzel

+0

@NPE我必须改变什么才能得到一个有序的字典? – ericMTR

在这里你去:

>>> given_dict = collections.OrderedDict([('one', ['-', '-']), ('two', ['-', '-'])]) 
>>> given_list = ['a', 'b'] 
>>> {x[0]:x[1]+[given_list[i]] for i,x in enumerate(given_dict.items())} 
{'one': ['-', '-', 'a'], 'two': ['-', '-', 'b']}