Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用字典的嵌套列表理解_Python_Python 3.x_Dictionary_List Comprehension - Fatal编程技术网

Python 使用字典的嵌套列表理解

Python 使用字典的嵌套列表理解,python,python-3.x,dictionary,list-comprehension,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}, 'B

我有这样一份清单:

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:数字是整数还是字符串(首选字符串)无关紧要。

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

outLst = []

for oKey in mydict.keys():
    outLst.append([oKey+':'])
    for iKey in mydict[oKey]:
        outLst[-1].append(str(mydict[oKey][iKey]))
print outLst
其中输出为:


如果您希望对输出列表进行排序,我可以修改代码来进行排序。

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

outLst = []

for oKey in mydict.keys():
    outLst.append([oKey+':'])
    for iKey in mydict[oKey]:
        outLst[-1].append(str(mydict[oKey][iKey]))
print outLst
[[x] + y.values() for x, y in mydict.items()]
其中输出为:

如果您希望对输出列表进行排序,我可以修改代码进行排序。

您可以尝试以下操作:

[[x] + y.values() for x, y in mydict.items()]
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()]
您可以尝试以下方法:

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()]

我在评论中运用了哈姆斯的思想,找到了一个解决方案:

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

这给出了正确的输出。

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

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

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



这会给出正确的输出。

输出字符串中的冒号是故意的吗?@chepner,你是说结果的[]吗?是的,我需要它们。我将把结果放在moduleit中,这是绝对可能的,但是请注意字典是无序的,所以条目的顺序是任意排序的。类似于mydict.items()中x的
[[x]+y.values()]
,例如example@Hamms,如果我在mydict.items()中为x,y添加了
[[x]+y.values()
,请给出错误<代码>“类型错误:只能将列表(而不是“dict_值”)连接到列表。”
@Hamms,我发现您的代码有一个升级:这个
[[x,*y.values()]在mydict.items()]中用于x,y的
工作得很好。输出字符串中的冒号是故意的吗?@chepner,你是说结果的[]吗?是的,我需要它们。我将把结果放在moduleit中,这是绝对可能的,但是请注意字典是无序的,所以条目的顺序是任意排序的。类似于mydict.items()中x的
[[x]+y.values()]
,例如example@Hamms,如果我在mydict.items()中为x,y添加了
[[x]+y.values()
,请给出错误<代码>“类型错误:只能将列表(而不是“dict_值”)连接到列表。”
@Hamms,我发现您的代码有一个升级:这个
[[x,*y.values()]在mydict.items()]中用于x,y
工作得很好。有没有办法在一行中实现这一点?有没有办法在一行中实现这一点?
[[x]+y.values()]在mydict.items()中用于x,y给出错误信息。我在mydict.items()中使用了x,y的
[[x,*y.values()]找到了解决方案。
。什么错误?我的代码在你的数据上对我有效。输出是
[['Alpha',3,4',a',1],'Beta',2,5',b',2],'Gamma',1,6',c',3]
类型错误:只能将列表(而不是“dict_值”)连接到列表中。
。虽然此代码可以回答问题,提供关于如何和/或为什么解决问题的附加上下文将提高答案的长期价值。@EnderLook我的代码适用于python 3.4,您的代码将引发
SyntaxError:只能将带星号的表达式用作赋值目标。看起来您正在使用较新的python。我猜是3.5或3.6。
[[x]+y.values(),在mydict.items()中为x,y指定值()
给出错误。我在mydict.items()中使用了x,y的
[[x,*y.values()]找到了解决方案。
。什么错误?我的代码在你的数据上对我有效。输出是
[['Alpha',3,4',a',1],'Beta',2,5',b',2],'Gamma',1,6',c',3]
类型错误:只能将列表(而不是“dict_值”)连接到列表中。
。虽然此代码可以回答问题,提供关于如何和/或为什么解决问题的附加上下文将提高答案的长期价值。@EnderLook我的代码适用于python 3.4,您的代码将引发
SyntaxError:只能将带星号的表达式用作赋值目标。看起来您正在使用较新的python。我猜是3.5或3.6。这给了我一个错误,但在mydict.items()中使用类似的代码
[[x,*y.values()]来表示x,y
我得到了输出。此解决方案仅适用于Python 2。适用于Python3的脚本应该是@Ender Look's.Ahh,py2。。。在标记中我放置了py3。这给了我一个错误,但是在mydict.items()中使用了类似的代码
[[x,*y.values()]来表示x,y
我得到了输出。此解决方案仅适用于Python 2。适用于Python3的脚本应该是@Ender Look's.Ahh,py2。。。在标记中我把py3放进去。您的代码受到这样一种假设的影响,即dict键将以相同的方式排序。虽然这在今天是正确的,但您应该按键排序,以防止将来的dict实现中顺序发生变化。@mattmc3,这本词典不会得到新的值,所以我喜欢他的排序,有什么问题吗?我不能很好地理解你的评论。。。很抱歉,“l”、“n”、“q”和“z”键在所有3个嵌套dict中按顺序出现,这是巧合。根据您的答案,未来的解决方案更像是
[[x,[z[1]对于排序中的z(y.items())]]x,y对于mydict.items()]
@mattmc3,对不起,我的代码和您的代码有什么区别。我的不接受新钥匙,你的接受吗?您的corde sort my keys Alphacaly?
*y.values()
假设所有3个dict将以相同的顺序(按键)返回其值。我的实现消除了这一假设并保证了这一点。您的代码受到dict键将以相同方式排序的假设的影响。虽然这在今天是正确的,但您应该按键排序,以防止将来的dict实现中顺序发生变化。@mattmc3,这本词典不会得到新的值,所以我喜欢他的排序,有什么问题吗
[ [ key+':', *value.values()] for key,value in mydict.items()]

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