连接字典项,键

19 投票
3 回答
44938 浏览
提问于 2025-04-18 08:17

请看下面的代码片段,这是关于连接方法的(使用的是Python 2.7.2):

iDict={'1_key':'abcd','2_key':'ABCD','3_key':'bcde','4_key':'BCDE'}
'--'.join(iDict)

结果显示为

'2_key--1_key--4_key--3_key'

请评论一下为什么只有键被连接?而且顺序也不是按照预期的排列。

注意 - 下面是各个方法的具体说明。

  • '--'.join(iDict.values()) ==> 'ABCD--abcd--BCDE--bcde' ==> 顺序不是按照预期的排列
  • '--'.join(iDict.keys()) ==> '2_key--1_key--4_key--3_key' ==> 顺序也不是按照预期的排列

3 个回答

5

遍历字典时,只能得到键:

>>> list(iDict)
['2_key', '1_key', '4_key', '3_key']

可以查看dict()的文档

iter(d)
这个函数会返回一个字典的键的迭代器。这是iterkeys()的简化版。

list()str.join()这两个函数会对它们的参数调用iter(),以便遍历其中的元素。

字典是无序的容器;它们的顺序是由底层的数据结构决定的,取决于键的插入和删除历史。

这在dict.items()的文档中有说明:

CPython实现细节:键和值的顺序是任意的,但不是随机的,这个顺序在不同的Python实现中可能会有所不同,并且依赖于字典的插入和删除历史。

还可以查看为什么字典和集合中的顺序是任意的?

24

如果你查看文档,你会发现遍历一个 dict(字典)时,得到的只是键。

如果你想同时得到键和值,你需要遍历 dict.items(),这样会得到一个包含键和值的元组 (key, value)

'--'.join(iDict.items())

如果你想把键和值合并成一个字符串,你需要明确告诉Python该怎么做:

'--'.join('{} : {}'.format(key, value) for key, value in iDict.items())
6

Python中的字典是无序的(或者说,它们的顺序是任意的),当你遍历字典时,只会返回键:

>>> d = {'0':0, '1':1, '2':2, '3':3, '4':4}
>>> print(d)
{'4': 4, '1': 1, '0': 0, '3': 3, '2': 2}

如果你需要同时获取键和值,可以使用 iDict.items()

如果你需要保持顺序,可以使用 collections.OrderedDict

撰写回答