相关文章推荐
高大的板栗  ·  tkinter中的askstring参数 ...·  2 小时前    · 
暗恋学妹的柑橘  ·  AttributeError: ...·  2 小时前    · 
爱听歌的炒饭  ·  python tkinter 使用(八) ...·  2 小时前    · 
买醉的闹钟  ·  Help to filter in ...·  1 周前    · 
豪气的斑马  ·  数据库sql ...·  1 年前    · 

解构和重构Python词典

7 人关注

我有一个字典,我需要把它的键和值解构为两个列表(或任何其他类型,可以完成这项工作),然后在另一个函数中,构建完全相同的字典,把键和值放回去。正确的方法是什么?

1 个评论
我试着用 dict.keys() dict.values() 把键和值分成两个列表,现在我有了这些列表,但我不确定如何用这两个列表创建同一个字典。
python
dictionary
Yasin
Yasin
发布于 2016-04-29
4 个回答
tobias_k
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}
    
效果很好!谢谢Tobias!
sowa
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))
    
替换代码0】能保证这些东西被正确配对吗?也许最好使用 zip(*d.items()) ......或者直接将项目存储在一个图元的列表中,根本不需要进行压缩。
我也很好奇,这是否能保证他们的配对正确。 tobias_k 你在这种情况下如何使用那个 zip(*d.items())
sowa
从文档中可以看到:"如果调用 items(), keys(), values(), iteritems(), iterkeys(), and itervalues(),中间没有对 dictionary 进行修改,这些列表将直接对应。这允许使用 zip() 创建 (value, key) 对: pairs = zip(d.values(), d.key())"。
Strik3r
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
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']