以升序将键值对添加到字典中

时间:2014-08-07 20:17:40

标签: python

说我有重复的单词列表:

["Apple", "Orange", "Grape", "Orange", "Watermelon", "Apple", "Grape"]

我需要将它们放入字典中,以便每个单词都有一个升序的键:

{1 : "Apple", 2 : "Orange", 3 : "Grape", 4: "Watermelon"}

订单基于首先出现的单词。如果" Apple"首先显示,它将具有键 1 以及是否" Apple"出现在未来,它将被忽略,因为" Apple"已包括在1.如果" Orange"出现在" Apple"之后,它将具有密钥 2 。因此,键值对按升序添加。

我没有添加和检查重复的问题,但我正在努力使按键按升序排列。有线索吗?

5 个答案:

答案 0 :(得分:5)

如果您不介意导入:

>>> from collections import OrderedDict
>>> s = ["Apple", "Orange", "Grape", "Orange", "Watermelon", "Apple", "Grape"] 
>>> dict(enumerate(OrderedDict.fromkeys(s), 1))
{1: 'Apple', 2: 'Orange', 3: 'Grape', 4: 'Watermelon'}

这是有效的,因为OrderedDict.fromkeys创建了一个有序字典,其中的顺序是插入顺序:

>>> OrderedDict.fromkeys(s)
OrderedDict([('Apple', None), ('Orange', None), ('Grape', None), ('Watermelon', None)])

答案 1 :(得分:3)

只需维护一个索引,并根据字典的值检查每个水果。

fruits = ["Apple", "Orange", "Grape", "Orange", "Watermelon", "Apple", "Grape"] 
d = {}
index = 1
for fruit in fruits:
    if fruit not in d.values():
        d[index] = fruit
        index += 1

会给你:

>>> d
{1: 'Apple', 2: 'Orange', 3: 'Grape', 4: 'Watermelon'}

答案 2 :(得分:1)

您可以将list转换为set,从而消除冗余条目,但会丢失初始列表顺序:

fruit = set(["Apple", "Orange", "Grape", "Orange", "Watermelon", "Apple", "Grape"])

对象fruit变为:

{'Apple', 'Grape', 'Orange', 'Watermelon'}

对于像这样的情况,我发现将迭代索引从1开始更容易。如果您想在将水果分配到字典中的数字键之前对其进行排序,则需要将sorted()函数应用于水果集以进行字母排序(您还可以setup a parameter进行排序使用sorted()函数的其他方式。)

basket = {}
for i, item in enumerate(sorted(fruit), start=1):
    basket[i] = item
print basket

印刷结果:

{1: 'Apple', 2: 'Grape', 3: 'Orange', 4: 'Watermelon'}

答案 3 :(得分:0)

在评论中讨论后编辑:

检查字典中是否存在密钥的pythonic方法:

fruits = ['Apple', 'Orange', 'Grape', 'Orange', 'Watermelon', 'Apple', 'Grape']
index = 1
basket = {}
for fruit in fruits:
    if fruit not in basket:
        basket[fruit] = index
        index = index + 1

答案 4 :(得分:0)

fruits = ["Apple", "Orange", "Grape", "Orange", "Watermelon", "Apple", "Grape"] 
basket = []
for i in range(len(fruits)):
    if fruit[i] not in basket:
        basket.append(fruit)

这不会让你获得字典,但它无关紧要,因为元素的访问方式相同:basket[2] == "Grape"无论哪种方式,假设你正确的数组被索引为0而你想要的字典布局是1索引的。