为什么Python列表理解失败?

vof42yt1  于 2023-06-25  发布在  Python
关注(0)|答案(1)|浏览(75)

为什么下面的代码会失败?我得到一个'd_item'是未定义的错误。

inp = [{'Math': 90, 'Science': 92}, {'Math': 89, 'Science': 94}, {'Math': 92, 'Science': 88}]
d = [value for key, value in d_item.items() for d_item in inp]

然而,这段代码运行:

inp = [{'x': '10', 'y': '20', 'z': '30'}, {'p': '40', 'q': '50', 'r': '60'}] 
ints = [dict([key,int(value)] for key, value in item.items()) for item in inp]

据我所知,他们都遵循相同的惯例。
我已经在这个问题上纠结了太久,为什么第二个代码块允许我在for语句中声明变量名之前使用变量名,而第一个代码块却不允许?

7vux5j2d

7vux5j2d1#

从阅读以下内容开始:How does the list comprehension to flatten a python list work?
这是一个很好的解释如何处理嵌套的东西。
所以你的语法应该是:

d = [value for d_item in inp for key, value in d_item.items() ]

至于为什么第二个工作,dict创建是1表达式(带有内部循环),基于它旁边的隐式(单个)循环。

ints = [dict([key,int(value)] for key, value in item.items()) for item in inp]
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^      ^^^^^^^^^^^
                single expression (with internal loop)              for-loop

相关问题