使用词典的嵌套列表理解

时间:2017-05-26 23:13:45

标签: python python-3.x dictionary list-comprehension

我有一个这样的清单:

mydict = {
              'Alpha' : {'l':'a','n':1,'q':3,'z':4},
              'Beta'  : {'l':'b','n':2,'q':2,'z':5},
              'Gamma' : {'l':'c','n':3,'q':1,'z':6}
         }
# Or
mydict = {'Alpha': {'l': 'a', 'n': 1, 'q':3, 'z':4}, 'Beta': {'l': 'b', 'n': 2, 'q':2, 'z':5}, 'Gamma': {'l': 'c', 'n': 3, 'q':1, 'z':6}}

我的输出必须是:

[['Alpha:','a',1,3,4],['Beta:','b',2,2,5],['Gamma:',c,3,1,6]]
# Or
[
    ['Alpha:' ,'a'  ,1  ,3  ,4],
    ['Beta:'  ,'b'  ,2  ,2  ,5],
    ['Gamma:' ,'c'  ,3  ,1  ,6]
]

我的目标是:

[[x,y['l'],y['n'],y['q'],y['z']] for x,y in mydict.items()]

但我不想使用y['l'],y['n'],我想使用另一个词典理解。这可能吗?例如,如果我将我的密钥'l'修改为'a',则代码将无效,如果我添加新密钥'x',则不会显示该密钥。
PD:数字是整数还是字符串(首选字符串)并不重要。

5 个答案:

答案 0 :(得分:2)

你可以试试这个:

mydict = {'Alpha': {'l': 'a', 'n': 1, 'q':3, 'z':4}, 'Beta': {'l': 'b', 'n': 2, 'q':2, 'z':5}, 'Gamma': {'l': 'c', 'n': 3, 'q':1, 'z':6}}

new_list = [[i]+b.values() for i, b in mydict.items()]

答案 1 :(得分:2)

在评论中使用Hamms的想法我找到了一个解决方案:

[[x+':', *y.values()] for x, y in mydict.items()]

这给出了正确的输出。

答案 2 :(得分:1)

您可以循环遍历字典的每个级别,并将值作为字符串附加到嵌套列表。

ng-disabled

输出为:

outLst = [] for oKey in mydict.keys(): outLst.append([oKey+':']) for iKey in mydict[oKey]: outLst[-1].append(str(mydict[oKey][iKey])) print outLst

如果要对输出列表进行排序,我可以修改代码来执行此操作。

答案 3 :(得分:1)

[ [ key+':', *value.values()] for key,value in mydict.items()]

[['Alpha:', 'a', 1, 3, 4], ['Beta:', 'b', 2, 2, 5], ['Gamma:', 'c', 3, 1, 6]]

答案 4 :(得分:0)

[[x] + y.values() for x, y in mydict.items()]