如何提取一组密钥的所有值

时间:2014-07-03 22:46:57

标签: python dictionary

如何从一组键中提取所有值,而不是写所有键,用于具有两个(或更多)条目的字典,而不是使用循环,例如:

dictionary={'a':{'a1':'1','a2':'2','a3':'3'},'b':{'a1':'x','a2':'y','a3':'z'}}

dictionary[*]['a1']

我会回来'1'和&的 'x'

2 个答案:

答案 0 :(得分:3)

看起来你正在寻找列表理解。

dictionary={'a':{'a1':'1','a2':'2','a3':'3'},'b':{'a1':'x','a2':'y','a3':'z'}}

output = [dictionary[x]['a1'] for x in dictionary]
print output

输出:

['1', 'x']

如果担心所有值都不存在子项a1,那么我们应该切换到dict.getNone将返回a1以查找{{1}的所有情况不在字典里。

output = [dictionary[x].get('a1') for x in dictionary]

或者,如果我们不想要填充None值,我们可以像JohnClements建议的那样使用过滤器。

output = [dictionary[x]['a1'] for x in dictionary if 'a1' in dictionary[x]]

答案 1 :(得分:0)

import operator

dictionary={'a':{'a1':'1','a2':'2','a3':'3'},'b':{'a1':'x','a2':'y','a3':'z'}}

map(operator.itemgetter('a1'), dictionary.itervalues())

OUTPUT:
['1', 'x']

如果你想要多件物品

result = map(operator.itemgetter('a1', 'a2'), dictionary.itervalues())
zip(*result)

OUTPUT:
[('1', 'x'), ('2', 'y')]

如果你想作为字典

keys = ['a1', 'a2']
values = map(operator.itemgetter(*keys), dictionary.itervalues())
dict(zip(keys, zip(*values)))

OUTPUT:
{'a1': ('1', 'x'), 'a2': ('2', 'y')}