使用for循环将元素添加到列表中的现有字典

时间:2018-07-24 14:38:51

标签: python for-loop

我有下面的词典列表:

c = [{'2015 Salary' : '25'}, {'2015 Salary': '35'},
    {'2016 Salary' : '30'}, {'2016 Salary' : '40'}]

我还有另一个列表,希望通过使用for循环附加到上面:

e = [{'Sport': 'MLB', 'Position': 'SP', 'Age': '25', '2015 Salary': '25',  
     '2016 Salary': '30'},
     {'Sport': 'NBA', 'Position': 'PG', 'Age': '28', '2015 Salary': '35',  
     '2016 Salary': '40'}}]

我希望最终输出是

public class Messages extends Service {
    @Nullable
    @Override
    public IBinder onBind(Intent intent) {
        return null;
    }

    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        return super.onStartCommand(intent, flags, startId);
    }
}

位置永远是相同的,这就是为什么我要使用for循环的原因。

4 个答案:

答案 0 :(得分:7)

d更新时,您可以使用itertools.cyclec上重复。

import itertools

for existing, new_dict in zip(cycle(d), c):
    existing.update(new_dict)

cycle会在穷尽时从头开始重新启动,从而将列表变成无限列表。将它们压缩在一起时,cycle(d)c配对以给出:

({'Sport': 'MLB', 'Position': 'SP', 'Age': '25'}, {' 2015 Salary' : '25'})
({'Sport': 'NBA', 'Position': 'PG', 'Age': '28'}, {'2015 Salary': '35'})
({'Sport': 'MLB', 'Position': 'SP', 'Age': '25'}, {'2016 Salary ': '30'})
({'Sport': 'NBA', 'Position': 'PG', 'Age': '28'}, {'2016 Salary' : '40'})

然后将d更新为您的预期输出。

答案 1 :(得分:1)

您可以通过以下方式实现它:

# config/packages/sonata.yaml

sonata_translation:
    locales: [en, fr]
    default_locale: en
    gedmo:
        enabled: false
    knplabs:
        enabled: true

for i, current_d in enumerate(d): current_l = c[i::2] for e in current_l: current_d.update(e) 将包含您想要的信息。

答案 2 :(得分:1)

希望这会有所帮助

for i in range(len(d)):
     for j in range(i,len(c),i+2):
             d[i].update(c[j])

答案 3 :(得分:1)

这是我使用 comprehensions 的单线样式解决方案,无需任何导入,并且无论d输入的长度如何,该方法都可以使用:

d = [{'Sport': 'MLB', 'Position': 'SP', 'Age': '25'},
     {'Sport': 'NBA', 'Position': 'PG', 'Age': '28'}]

c = [{'2015 Salary': '25'}, {'2015 Salary': '35'},
     {'2016 Salary': '30'}, {'2016 Salary': '40'}]

result = [{k:v for i in ([d[j]] + c[j::len(d)]) for k,v in i.items()} for j in range(len(d))]

print(result)
# [{'Sport': 'MLB', 'Position': 'SP', 'Age': '25', '2015 Salary': '25', '2016 Salary': '30'},
#  {'Sport': 'NBA', 'Position': 'PG', 'Age': '28', '2015 Salary': '35', '2016 Salary': '40'}]