在没有第一个和最后一个元素的字典上循环

时间:2017-12-28 13:43:40

标签: python loops dictionary

我想知道如何在没有第一个和最后一个元素的情况下循环Python字典。我的钥匙从1开始,所以我不能使用len(大写字母)

>>> capitals = {'15':'Paris', '16':'New York', '17':'Berlin', '18':'Brasilia', '19':'Moscou'}
>>> for city in capitals:
>>>     print(city)
Paris
New York
Berlin
Brasilia
Moscou

我想要这个结果:

New York
Berlin
Brasilia

我的钥匙从1开始,所以我无法使用len(capitals)

7 个答案:

答案 0 :(得分:3)

尝试此操作,将字典转换为列表,然后打印列表

c=[city for key,city in capitals.items()]
c[1:-1]

输出

['New York', 'Berlin', 'Brasilia']

答案 1 :(得分:3)

您可以将数据放在list(capitals.items())元组列表中,这是一个有序集合:

[('15','Paris'), ('16','New York'), ('17', 'Berlin'), ('18', 'Brasilia'), ('19', 'Moscou')]

然后将其转换回字典,删除第一个和最后一个项目:

capitals = dict(capitals[1:-1])

这给了一个新词典:

{'16': 'New York', '17': 'Berlin', '18': 'Brasilia'}

然后你可以在更新的字典中循环这些键:

for city in capitals:
    print(capitals[city])

并获得您想要的城市:

New York
Berlin
Brasilia

答案 2 :(得分:2)

Dictionaries are ordered in Python 3.6+

您可以使用list(capitals.values())[1:-1]获取除第一个和最后一个之外的城市。

capitals = {'15':'Paris', '16':'New York', '17':'Berlin', '18':'Brasilia', '19':'Moscou'}

for city in list(capitals.values())[1:-1]:
    print(city)

New York
Berlin
Brasilia
>>> 

2017年12月15日星期五,Guido van Rossum announced on the mailing list:“Dict保持插入顺序”是裁决。

答案 3 :(得分:2)

由于dicts本质上是无序的,因此您必须先订购其商品。根据您的示例数据,您希望跳过第一个和最后一个按键:

for k in sorted(capitals)[1:-1]:
    print(capitals[k])

答案 4 :(得分:2)

我不得不不同意先前的回答,也不同意Guido的说法,即“词典保持插入顺序”。 Dict并非始终保持插入顺序。我刚刚尝试过(虽然在pyspark解释器上,但是仍然),但订单已更改。 因此,在运行此类代码之前,请仔细查看您的环境并进行快速测试。 对我来说,除非您明确知道要删除的密钥,否则没有办法以100%的信心在Python上做到这一点,如果可以,则可以使用dict理解:

    myDict = {key:val for key, val in myDict.items() if key != '15'}

答案 5 :(得分:0)

如评论中所述。字典未设置为按顺序存储数据,列表会更好。例如像[[15,'Paris'],[ [16,'New York'],....]

这样的二维列表

下面是从字典中获取所有键(数字)并将它们放入列表键的代码。然后我弹出列表的第一个(0)元素,然后使用for循环来拉动列表中剩下的键的每个城市。

capitals={'15':'Paris', '16':'New York', '17':'Berlin', '18':'Brasilia', '19':'Moscou'}
keys=list(capitals.keys()) #get list of keys from dictionary
keys.pop(0)  #Remove first in list of keys
for key in keys:
    print capitals[key]

答案 6 :(得分:0)

您可以对dict进行排序,然后只获取除第一个和最后一个之外的所有值:

capitals = {'15':'Paris', '16':'New York', '17':'Berlin', '18':'Brasilia', '19':'Moscou'}

for i in sorted(capitals)[:-1][1:]:
    print(capitals[i])

输出:

New York
Berlin
Brasilia

在一行中:

print([capitals[i] for i in sorted(capitals)[:-1][1:]])