繁体   English   中英

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

[英]Adding key-value pairs to a dictionary in an ascending order

假设我有一个重复单词列表:

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

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

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

顺序基于哪个单词首先出现。 如果“ Apple”首先出现,它将具有键1 ;如果将来出现“ Apple”,则它将被忽略,因为“ Apple”已经包含在1中。如果“ Orange”出现在“ Apple”之后,它将有钥匙2 因此,键值对以升序添加。

我在添加和检查重复项方面没有问题,但是我一直在努力按升序排列键。 有什么线索吗?

如果您不介意导入:

>>> 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)])

只需维护一个索引,然后对照字典的值检查每个水果即可。

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'}

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

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

对象fruit变为:

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

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

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

打印结果:

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

讨论后在评论中编辑:

检查字典中是否存在键的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
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"任一种方式,假设您纠正了所需的dict时将数组索引为0的情况。布局是1索引的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM