我有下面的词典列表:
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循环的原因。
答案 0 :(得分:7)
从d
更新时,您可以使用itertools.cycle
在c
上重复。
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'}]