在 python3 中理解熊猫循环字典的一行
Understanding one line for loop dictionary to panda in python3
我已经阅读了几个关于此的 Whosebug 主题以及 Google。这不是我的代码。它是为 Python2 编写的。我试图理解 Python 3 中出现错误的一行。我很难理解这一行的循环。
para['row_colors'] = pd.DataFrame([dict({'index': row}.items() + row_colors[row].items()) for row in table.index]).set_index('index')'
'row' 是用作密钥的示例名称。我明白了。
那个 '+' 正在抛出错误。不能做 dict.item + dict.item。我不明白正在构建的字典的结构。
是的,因为 dict.items()
不再 return 是 Python 3 中的列表,而是 return 是充当 set-like 的特殊对象查看字典中的项目(与.keys
和.values
相同)。最简单的修复方法就是 list(dict.items())
.
但是,在这种特殊情况下,dict({'index': row}.items() + row_colors[row].items())
可能只是 python 中的 {'index':row, **row_colors[row]}
3.
所以你可以使用:
para['row_colors'] = pd.DataFrame([{'index': row, **row_colors[row]} for row in table.index]).set_index('index')'
使用更现代的语法。
要了解以前的版本在做什么,请注意 dict
构造函数接受 key-value 对的可迭代:
>>> dict([('a', 1), ('b', 2)])
{'a': 1, 'b': 2}
因为 .items()
曾经 return 一个 key-value 对的列表,你可以做类似
dict(d1.items() + d2.items())
合并两个字典。要将其音译为 Python 3,您需要这样的内容:
>>> d1 = {'foo': 'bar', 'baz': 'zing'}
>>> d2 = {"apple": 42}
>>> dict(list(d1.items()) + list(d2.items()))
{'foo': 'bar', 'baz': 'zing', 'apple': 42}
但是python3有更方便的语法,你可以这样做:
>>> {**d1, **d2}
{'foo': 'bar', 'baz': 'zing', 'apple': 42}
或者,更灵活地使用特定的 key-value 对:
>>> {'index': 'column1', **d1, 'frob': 'bob', **d2}
{'index': 'column1', 'foo': 'bar', 'baz': 'zing', 'frob': 'bob', 'apple': 42}
最后,注意 Python 3.9 will be adding the |
operator as a merge operator for dicts,允许非常简洁:
>>> d1 | d2
{'foo': 'bar', 'baz': 'zing', 'apple': 42}
对于最简单的情况
我已经阅读了几个关于此的 Whosebug 主题以及 Google。这不是我的代码。它是为 Python2 编写的。我试图理解 Python 3 中出现错误的一行。我很难理解这一行的循环。
para['row_colors'] = pd.DataFrame([dict({'index': row}.items() + row_colors[row].items()) for row in table.index]).set_index('index')'
'row' 是用作密钥的示例名称。我明白了。 那个 '+' 正在抛出错误。不能做 dict.item + dict.item。我不明白正在构建的字典的结构。
是的,因为 dict.items()
不再 return 是 Python 3 中的列表,而是 return 是充当 set-like 的特殊对象查看字典中的项目(与.keys
和.values
相同)。最简单的修复方法就是 list(dict.items())
.
但是,在这种特殊情况下,dict({'index': row}.items() + row_colors[row].items())
可能只是 python 中的 {'index':row, **row_colors[row]}
3.
所以你可以使用:
para['row_colors'] = pd.DataFrame([{'index': row, **row_colors[row]} for row in table.index]).set_index('index')'
使用更现代的语法。
要了解以前的版本在做什么,请注意 dict
构造函数接受 key-value 对的可迭代:
>>> dict([('a', 1), ('b', 2)])
{'a': 1, 'b': 2}
因为 .items()
曾经 return 一个 key-value 对的列表,你可以做类似
dict(d1.items() + d2.items())
合并两个字典。要将其音译为 Python 3,您需要这样的内容:
>>> d1 = {'foo': 'bar', 'baz': 'zing'}
>>> d2 = {"apple": 42}
>>> dict(list(d1.items()) + list(d2.items()))
{'foo': 'bar', 'baz': 'zing', 'apple': 42}
但是python3有更方便的语法,你可以这样做:
>>> {**d1, **d2}
{'foo': 'bar', 'baz': 'zing', 'apple': 42}
或者,更灵活地使用特定的 key-value 对:
>>> {'index': 'column1', **d1, 'frob': 'bob', **d2}
{'index': 'column1', 'foo': 'bar', 'baz': 'zing', 'frob': 'bob', 'apple': 42}
最后,注意 Python 3.9 will be adding the |
operator as a merge operator for dicts,允许非常简洁:
>>> d1 | d2
{'foo': 'bar', 'baz': 'zing', 'apple': 42}
对于最简单的情况