我有字典项目
import csv
with open('data.csv', 'a') as f:
fieldnames = ['Phase', 'Date', 'Time','Name']
thewriter = csv.DictWriter(f, fieldnames = fieldnames)
thewriter.writeheader()
thewriter.writerow({'Phase': _phase, 'Date' :
_currentDT.date(), 'Time' : _currentDT.time(),
'Name' : _nameImage })
我想在名为 loaded
的词典列表上映射Items的值Items = {1: 1, 2: 2, 3: 2, 4: 2, 5: 2, 6: 3, 7: 4, 8: 5}
这样我就得到了这个结果:
loaded = [{6: [4, 1, 3]}, {1: [5]}, {10: [8, 6]}, {6: [7]}, {2: [2]}]
我尝试运行循环并在找到匹配项但无法正常工作时替换这些值
u_loaded = [{6: [2, 1, 2]}, {1: [2]}, {10: [5, 3]}, {6: [4]}, {2: [2]}]
答案 0 :(得分:2)
u_loaded = [{k:[Items[a] for a in v] for k,v in l.items()} for l in loaded]
print(u_loaded)
输出
[{6: [2, 1, 2]}, {1: [2]}, {10: [5, 3]}, {6: [4]}, {2: [2]}]
答案 1 :(得分:2)
每次仅一步,您可以按以下方式进行操作。
loaded = [{6: [4, 1, 3]}, {1: [5]}, {10: [8, 6]}, {6: [7]}, {2: [2]}]
Items = {1: 1, 2: 2, 3: 2, 4: 2, 5: 2, 6: 3, 7: 4, 8: 5}
u_loaded = [{k: [Items[val] for val in v] for k,v in d.items()} for d in loaded]
有关1个班轮的说明,我们可以将其打开:
u_loaded = [] #stores the list of dicts
for d in loaded:
u_d = {} #create empty result dict
for k,v in d.items():
u_d[k] = [Items[val] for val in v] #for every value, take the corresponding mapping result from loaded
u_loaded.append(u_d) #append the dictionary to the result list
输出:
[{6: [2, 1, 2]}, {1: [2]}, {10: [5, 3]}, {6: [4]}, {2: [2]}]
答案 2 :(得分:1)
您可以使用简单的list
理解:
result = [{k: [Items[v] for v in l] for k, l in d.items()} for d in loaded]
print(result)
输出:
[{6: [2, 1, 2]}, {1: [2]}, {10: [5, 3]}, {6: [4]}, {2: [2]}]
这等效于以下for
循环:
result = []
for d in loaded:
new_sub_dict = {}
for k, l in d.items():
new_sub_list = []
for v in l:
new_sub_list.append(Items[v])
new_sub_dict[k] = new_sub_list
result.append(new_sub_dict)
答案 3 :(得分:0)
您可能想要避免循环,以采用Pythonic样式。您想做的事情仅需一行即可实现:
u_loaded = [{k: [Items[i] for i in v] for k, v in d.items()} for d in loaded]
它使用列表推导来遍历loaded
中的所有字典。然后,它在字典键k
和值v
上循环,以重建您要创建的字典。