说我有重复的单词列表:
["Apple", "Orange", "Grape", "Orange", "Watermelon", "Apple", "Grape"]
我需要将它们放入字典中,以便每个单词都有一个升序的键:
{1 : "Apple", 2 : "Orange", 3 : "Grape", 4: "Watermelon"}
订单基于首先出现的单词。如果" Apple"首先显示,它将具有键 1
以及是否" Apple"出现在未来,它将被忽略,因为" Apple"已包括在1.如果" Orange"出现在" Apple"之后,它将具有密钥 2
。因此,键值对按升序添加。
我没有添加和检查重复的问题,但我正在努力使按键按升序排列。有线索吗?
答案 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索引的。