如何从一组键中提取所有值,而不是写所有键,用于具有两个(或更多)条目的字典,而不是使用循环,例如:
dictionary={'a':{'a1':'1','a2':'2','a3':'3'},'b':{'a1':'x','a2':'y','a3':'z'}}
dictionary[*]['a1']
我会回来'1'和&的 'x'
答案 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.get
,None
将返回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')}