将列表中的元素添加到字典中并增加值

时间:2018-07-01 12:00:00

标签: python

我有字典和清单。列表仅包含项目,字典包含项目以及我拥有多少个给定项目。我想做的是遍历字典和列表,如果字典中的键与列表中的项目相同,我只想将其值更新1,但是如果没有相同的项目将项目表单列表添加到dict并将其值设置为1。

stock = {apple: 1, banana: 4, orange: 10}
delivery = [apple, apple, grapefruit]

    for k, v in stock.items():
        for item in delivery:
            if item == stock[k]:
                stock[v] += 1
        else:
            stock.update({item:1})

输出应如下所示:

stock = {apple: 3, banana: 4, orange: 10, grapefruit: 1}

但是我收到消息:字典在迭代过程中更改了大小

7 个答案:

答案 0 :(得分:4)

迭代时,请勿更改dictlist。您可以像这样编写代码:

stock = {'apple': 1, 'banana': 4, 'orange': 10}
delivery = ['apple', 'apple', 'grapefruit']

for item in delivery:
    if item in stock:
        stock[item] +=1
    else:
        stock[item] = 1

print(stock)

答案 1 :(得分:2)

您实际上可以使用Counter中的collections,它确实可以满足您的需求。

from collections import Counter
stock = Counter({'apple': 1, 'banana': 4, 'orange': 10})
delivery = ['apple', 'apple', 'grapefruit']
stock.update(delivery)

答案 2 :(得分:1)

使用dict.get()

stock = {'apple': 1, 'banana': 4, 'orange': 10}
delivery = ['apple', 'apple', 'grapefruit']

for d in delivery:
    stock[d] = stock.get(d, 0) + 1

print(stock)

输出:

{'apple': 3, 'banana': 4, 'orange': 10, 'grapefruit': 1}

答案 3 :(得分:0)

您可能希望颠倒枚举顺序并遍历列表,将项目添加到字典或将它们的值增加一,视情况而定:

for item in delivery:
    if item in stock:
        stock[item] += 1
    else:
        stock[item] = 1

(请注意,您也可以将defaultdict(int)用于“ stock”字典对象,因此,您甚至不需要if / else即可,只需执行以下操作:

for item in delivery:
    stock[item] += 1

答案 4 :(得分:0)

在这种情况下,最好的办法是使用 Counter 集合而不是标准字典(https://docs.python.org/2/library/collections.html) 看看那里给出的基本示例:

# Tally occurrences of words in a list
cnt = Counter()
for word in ['red', 'blue', 'red', 'green', 'blue', 'blue']:
    cnt[word] += 1

使用标准字典时,您可以遍历列表并遵循以下几行:

for v in delivery:
    try:
        stock[v] += 1
    except KeyError:
        stock[v] = 1

或者,您可以使用dict的* get *方法并测试无。

答案 5 :(得分:0)

您可以为此目的使用collections.counter

from collections import Counter
stock = Counter({'apple': 1, 'banana': 4, 'orange': 10})
delivery = ['apple', 'apple', 'grapefruit']
stock.update(delivery)

stock
# Counter({'orange': 10, 'banana': 4, 'apple': 3, 'grapefruit': 1})

答案 6 :(得分:0)

也可以这样:

stock = {'apple': 1, 'banana': 4, 'orange': 10}
delivery = ['apple', 'apple', 'grapefruit']

stock.update({item: delivery.count(item) + stock.get(item,0) 
               for item in set(delivery)}) 

print(stock)
# {'apple': 3, 'banana': 4, 'orange': 10, 'grapefruit': 1})