首页 > 解决方案 > 识别字典列表中特定键的相同值

问题描述

我有一个看起来像这样的字典列表:

[
    {'ServiceID': 20, 'primary': '20', 'secondary': '12'},
    {'ServiceID': 20, 'primary': '20', 'secondary': '12'},
    {'ServiceID': 20, 'primary': '20', 'secondary': '12'},
    {'ServiceID': 16, 'primary': '16', 'secondary': '8'},
    {'ServiceID': 20, 'primary': '20', 'secondary': '12'},
    {'ServiceID': 8,  'primary': '8',  'secondary': '16'},
    {'ServiceID': 12, 'primary': '12', 'secondary': '20'},
    {'ServiceID': 8,  'primary': '8',  'secondary': '16'}
]

我想创建一个新的排序字典,其中我们有以下内容:

key = value of 'ServiceID'
key = value of how many times that particular 'ServiceID' is listed as a 'primary'
key = value of how many times that particular 'ServiceID' is listed as a 'secondary'

例如:

[
    {'ServiceID': 8, 'primaryCount': 2, 'secondaryCount': 1},
    {'ServiceID': 12, 'primaryCount': 1, 'secondaryCount': 4},
    {'ServiceID': 16, 'primaryCount': 1, 'secondaryCount': 2},
    {'ServiceID': 120, 'primaryCount': 4, 'secondaryCount': 1}
]

到目前为止,我所拥有的代码似乎并没有达到我想要的效果,这意味着我不确定如何在整个 for 循环中适当地增加初级和次级的数量,以及如何确保我正在捕获'ServiceID' 的唯一性

我认为我的逻辑有问题:

temp_count_list = list()
temp_primary_counts = 0
temp_secondary_counts = 0

for sub_dict in new_list:
    temp_dict = dict()

    temp_dict['ServiceID'] = sub_dict['ServiceID']
    
    if sub_dict['ServiceID'] == int(sub_dict['primarySlice']):
        temp_dict['primaryCount'] = temp_primary_counts +=1

    if sub_dict['ServiceID'] == int(sub_dict['secondarySlice']):
        temp_dict['secondaryCount'] = temp_secondary_counts +=1

    temp_count_list.append(temp_dict)

标签: pythondictionary

解决方案


基本思想是,在一个dict(在代码k中)中获取所有的ServiceID、primary、secondary,然后为每个唯一的ServiceID计算该ServiceID在primary和secondary中的频率。

l = [
    {'ServiceID': 20, 'primary': '20', 'secondary': '12'},
    {'ServiceID': 20, 'primary': '20', 'secondary': '12'},
    {'ServiceID': 20, 'primary': '20', 'secondary': '12'},
    {'ServiceID': 16, 'primary': '16', 'secondary': '8'},
    {'ServiceID': 20, 'primary': '20', 'secondary': '12'},
    {'ServiceID': 8,  'primary': '8',  'secondary': '16'},
    {'ServiceID': 12, 'primary': '12', 'secondary': '20'},
    {'ServiceID': 8,  'primary': '8',  'secondary': '16'}
]

k =     {'ServiceID': [], 'primaryCount': [], 'secondaryCount': []}

for i in l:
    k['ServiceID'].append(i['ServiceID'])
    k['primaryCount'].append(i['primary'])
    k['secondaryCount'].append(i['secondary'])

res = {'ServiceID': 0, 'primaryCount': [], 'secondaryCount': []}

result = []

for i in sorted(set(k['ServiceID'])):
    res['ServiceID']=i
    res['primaryCount'] = k['primaryCount' ].count(str(i))
    res['secondaryCount'] = k['secondaryCount' ].count(str(i))
    result.append(res)
    res = {'ServiceID': 0, 'primaryCount': [], 'secondaryCount': []}

print(result)

输出

[
 {'ServiceID': 8, 'primaryCount': 2, 'secondaryCount': 1},
 {'ServiceID': 12, 'primaryCount': 1, 'secondaryCount': 4}, 
 {'ServiceID': 16, 'primaryCount': 1, 'secondaryCount': 2},
 {'ServiceID': 20, 'primaryCount': 4, 'secondaryCount': 1}
]

推荐阅读