将dict列表转换为更简单的dict

时间:2016-07-26 10:30:27

标签: python-3.x

我有这样的字典列表:

[{
    'attr': 'bla',
    'status': '1',
    'id': 'id1'
}, {
    'attr': 'bla',
    'status': '1',
    'id': 'id2'
}, {
    'attr': 'bli',
    'status': '0',
    'id': 'id1'
}, {
    'attr': 'bli',
    'status': '1',
    'id': 'id2'
}]

我不想得到这样简单的结果:

result = {
    'bla' : True,
    'bli' : False
}

如果两个id对于attr有1,则该值为True。否则,它将是假的。

我试过

for elem in dict:
        for key, value in enumerate(elem):
        # ???

但我不明白该怎么做。我已经尝试了像

这样的东西
if all( val == '1' for val in list ):
    # ..

1 个答案:

答案 0 :(得分:0)

你走了:

dicts = [{
    'attr': 'bla',
    'status': '1',
    'id': 'id1'
}, {
    'attr': 'bla',
    'status': '1',
    'id': 'id2'
}, {
    'attr': 'bli',
    'status': '0',
    'id': 'id1'
}, {
    'attr': 'bli',
    'status': '1',
    'id': 'id2'
}]

# First run is to create all nessecary items in the 
# new Dictionary so i can use the and operator on them later.
newDict = {}
for dictio in dicts:
    for key, value in dictio.items():
        if key == 'attr':
            newDict[value] = True

# The second run uses the and operator            
for dictio in dicts:
    for key, value in dictio.items():
        if key == 'attr':
            tmpAttr = value
        if key == 'status':
            newDict[tmpAttr] = newDict[tmpAttr] and (value == '1')

print(newDict)

度过美好的一天!