有没有更优雅的方法将字典的键和值解压缩到两个列表中,而不会失去一致性?

Auf*_*ind 15 python dictionary list iterable-unpacking

我想出的是:

keys, values = zip(*[(key, value) for (key, value) in my_dict.iteritems()])
Run Code Online (Sandbox Code Playgroud)

但我不满意.蟒蛇说什么?

Fog*_*ird 57

keys, values = zip(*d.items())
Run Code Online (Sandbox Code Playgroud)

  • 你可以这样做:`[*keys],[*values] = zip(*d.items())` (5认同)

Con*_*ius 24

使用my_dict.keys()my_dict.values()怎么样?

keys, values = my_dict.keys(), my_dict.values()
Run Code Online (Sandbox Code Playgroud)

  • 这是有效的,因为与`dict`的契约之一是dict中的键和值的顺序将对应,只要dict的大小不变. (13认同)
  • 警告:我很确定这不是线程安全的(如果这对你很重要).因为dict.keys()与dict.values()分开调用,所以有一个竞争条件的机会,在这些调用之间修改dict.解压缩dict.items()在这里更安全,因为它是单个函数调用,并且不可能返回不同数量的键和值. (6认同)
  • 请注意: dict.keys() 和 dict.values() 不会返回列表。您必须将其类型转换为列表或设置。喜欢列表(dict.keys()) (2认同)
  • @RohitTaneja:是的,在Python 3中,在Python 2中(我在写此答案时就想到了)都返回列表。 (2认同)