缩短进入嵌套词典的列表理解

2024-09-28 23:25:05 发布

您现在位置:Python中文网/ 问答频道 /正文

下面的列表理解给出了所需的输出,但似乎有点长,因为我必须具体引用子字典中的每个值,因为每个主键的值都是另一个字典。有没有一种方法可以让我的列表理解变短,并且仍然提供相同的输出?如果可能的话,我在找一个单一的解决方案。在

myDict = {'pKey_b': {'val3': 'vb3', 'val1': 'vb1', 'val4': 'vb4', 'val2': 'vb2'}, 'pKey_a': {'val3': 'va3', 'val1': 'va1', 'val4': 'va4', 'val2': 'va2'}, 'pKey_e': {'val3': 've3', 'val1': 've1', 'val4': 've4', 'val2': 've2'}, 'pKey_d': {'val3': 'vd3', 'val1': 'vd1', 'val4': 'vd4', 'val2': 'vd2'}, 'pKey_c': {'val3': 'vc3', 'val1': 'vc1', 'val4': 'vc4', 'val2': 'vc2'}}

myListComp = sorted(sorted([k, v.values()[0], v.values()[1], v.values()[2], v.values()[3]]) for k, v in myDict.items())

print myListComp
'''
[
['pKey_a', 'va1', 'va2', 'va3', 'va4'],
['pKey_b', 'vb1', 'vb2', 'vb3', 'vb4'],
['pKey_c', 'vc1', 'vc2', 'vc3', 'vc4'],
['pKey_d', 'vd1', 'vd2', 'vd3', 'vd4'],
['pKey_e', 've1', 've2', 've3', 've4']
]
'''

Tags: 列表字典mydictvaluesval1val2val3val4
3条回答

来自help(dict.values)

values(...)
    D.values() -> list of D's values

知道dict.values()返回list(而不是tuple),您可以将列表理解简化为:

^{pr2}$

如果稍后您意识到您只需要v.values()上的前四个元素,请将其切成这样v.values()[:4]。在

在DSM建议的基础上,还有另一种方法可以做到:

result = [[k] + map(myDict[k].get, sorted(v)) for k, v in sorted(myDict.iteritems())]

怎么样:

>>> lc = sorted(sorted([k] + sorted(v.values()) for k,v in myDict.items()))
>>> for row in lc:
...     print row
...     
['pKey_a', 'va1', 'va2', 'va3', 'va4']
['pKey_b', 'vb1', 'vb2', 'vb3', 'vb4']
['pKey_c', 'vc1', 'vc2', 'vc3', 'vc4']
['pKey_d', 'vd1', 'vd2', 'vd3', 'vd4']
['pKey_e', 've1', 've2', 've3', 've4']

尽管你可能也想要

^{pr2}$

取决于您希望值以的排序顺序显示,还是按相应的排序键的顺序显示。在这里他们都是一样的。在

请注意,在您的原始代码中,键不需要显示为第一个元素,因为排序可能会将它们与值混合在一起;我已经确保它们保持在第一位。在

相关问题 更多 >