我有一个字典,我需要把它的键和值解构为两个列表(或任何其他类型,可以完成这项工作),然后在另一个函数中,构建完全相同的字典,把键和值放回去。正确的方法是什么?
解构和重构Python词典
7
人关注
1
个评论
Yasin
:
我试着用
dict.keys()
和
dict.values()
把键和值分成两个列表,现在我有了这些列表,但我不确定如何用这两个列表创建同一个字典。
Yasin
发布于
2016-04-29
4
个回答
tobias_k
发布于
2016-04-29
已采纳
0
人赞同
你可以使用
dict.items()
从字典中获取所有的键值对,然后直接存储它们...
>>> d = {"foo": 42, "bar": 23}
>>> items = list(d.items())
>>> dict(items)
{'bar': 23, 'foo': 42}
......或者用zip
将它们分配到两个单独的列表中。
>>> keys, values = zip(*d.items())
>>> dict(zip(keys, values))
{'bar': 23, 'foo': 42}
Yasin
:
效果很好!谢谢Tobias!
sowa
发布于
2016-04-29
0
人赞同
d = {'jack': 4098, 'sape': 4139}
k, v = d.keys(), d.values()
# Do stuff with keys and values
# Create new dict from keys and values
nd = dict(zip(k, v))
tobias_k
:
替换代码0】能保证这些东西被正确配对吗?也许最好使用
zip(*d.items())
......或者直接将项目存储在一个图元的列表中,根本不需要进行压缩。
Yasin
:
我也很好奇,这是否能保证他们的配对正确。 tobias_k 你在这种情况下如何使用那个
zip(*d.items())
?
sowa
:
从文档中可以看到:"如果调用 items(), keys(), values(), iteritems(), iterkeys(), and itervalues(),中间没有对 dictionary 进行修改,这些列表将直接对应。这允许使用 zip() 创建 (value, key) 对: pairs = zip(d.values(), d.key())"。
Strik3r
发布于
2016-04-29
0
人赞同
最好不要解构它。如果你需要键和值的列表,你可以通过以下方法获得。
keyList=list(dict.keys())
valueList = [dict[key] for key in keyList] or [dict[key] for key in dict.keys()]
Hope it helps.
The6thSense
发布于
2016-04-29
0
人赞同
将Dict解构为两个列表
>>> test_dict={"a":1, "b":2}
>>> keyList=[]
>>> valueList =[]
>>> for key,val in test_dict.items():
... keyList.append(key)
... valueList.append(val)
>>> print valueList
[1, 2]
>>> print keyList
['a', 'b']