关于python:联接字典项,键

Join dictionary item, keys

本问题已经有最佳答案,请猛点这里访问。

请参见下面的join方法代码段(使用的是python 2.7.2):

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

结果显示为

1
'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'==>序列不在ORDE中


如果看到这些文档,您将了解到迭代dict返回键。

您需要在dict.items()上迭代,它在tuples (key, value)上:

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

如果需要将键和值联接到一个字符串中,则需要显式地告诉Python如何执行此操作:

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

在字典上迭代只会生成键:

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

dict()文件:

iter(d)
Return an iterator over the keys of the dictionary. This is a shortcut for iterkeys().

list()str.join()都将在它们的参数上调用iter()来迭代元素。

字典是无序的容器;它们的顺序源于基础数据结构,并取决于键的插入和删除历史记录。

这在dict.items()中有记录:

CPython implementation detail: Keys and values are listed in an arbitrary order which is non-random, varies across Python implementations, and depends on the dictionary’s history of insertions and deletions.

另请参见为什么字典和集合中的顺序是任意的?


python字典是无序的(或者更确切地说,它们的顺序是任意的),当您迭代它们时,只返回键:

1
2
3
>>> 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