英文:
Why is this Python list comprehension failing?
问题
以下是要翻译的内容:
为什么以下代码失败?我收到一个'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语句之前使用变量名,而第一个代码块不允许?
英文:
Why does the following code fail? I'm getting a 'd_item' is not defined error.
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]
Yet this code runs:
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]
They both follow the same convention as far as I can tell.
I've been stuck on this for too long, why does the second code block let me use a variable name before its stated in a
for statement but the first one does not?
答案1
得分: 1
这是一个不错的解释关于如何处理嵌套的东西。
所以你的语法应该是:
d = [value for d_item in inp for key, value in d_item.items()]
至于为什么第二个例子有效,字典的创建是一个表达式(带有内部循环),基于其旁边的隐式(单一)循环。
ints = [dict([key,int(value)] for key, value in item.items()) for item in inp]
^ 单一表达式(带有内部循环) ^ for循环
英文:
Start by reading this: https://stackoverflow.com/questions/25674169/how-does-the-list-comprehension-to-flatten-a-python-list-work
It is a pretty good explanation of how nested things are handled.
So your syntax should be:
d = [value for d_item in inp for key, value in d_item.items() ]
as for why the second works, the dict creation is 1 expression (with an internal loop), based on the implicit (single) loop next to it.
ints = [dict([key,int(value)] for key, value in item.items()) for item in inp]
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^
single expression (with internal loop) for-loop
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论