首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从字典列表中找到唯一的键值以创建新列表

如何从字典列表中找到唯一的键值以创建新列表
EN

Stack Overflow用户
提问于 2021-12-13 14:47:40
回答 2查看 66关注 0票数 0

我有以下清单:

代码语言:javascript
复制
asset_list = 
[ 
{'cid': 60, 'client_id': '232-00000004', 'prem_id': 'PID-1', 'state': 'Alabama', 'rid': 103, 'total_premid': 0, 'total_site': 0, 'producer': 'HIK'}, 
{'cid': 60, 'client_id': '232-00000004', 'prem_id': 'PID-2', 'state': 'Alaska', 'rid': 104, 'total_premid': 0, 'total_site': 0, 'producer': 'HIK'}, 
{'cid': 64, 'client_id': '232-00000008', 'prem_id': 'PID-3', 'state': 'Alabama', 'rid': 105, 'total_premid': 0, 'total_site': 0, 'producer': 'TF Inc.'},
{'cid': 64, 'client_id': '232-00000008', 'prem_id': 'PID-3', 'state': 'Alabama', 'rid': 105, 'total_premid': 0, 'total_site': 0, 'producer': 'TF Inc.'}, 
{'cid': 64, 'client_id': '232-00000008', 'prem_id': 'PID-4', 'state': 'Arizona', 'rid': 106, 'total_premid': 0, 'total_site': 0, 'producer': 'TF Inc.'}, 
{'cid': 64, 'client_id': '232-00000008', 'prem_id': 'PID-5', 'state': 'California', 'rid': 107, 'total_premid': 0, 'total_site': 0, 'producer': 'TF Inc.'}, 
{'cid': 60, 'client_id': '232-00000004', 'prem_id': 'PID-7', 'state': 'Alabama', 'rid': 108, 'total_premid': 0, 'total_site': 0, 'producer': 'HIK'}

]

我必须从上面的列表中创建另一个列表,其中producerstate是唯一的,因此新列表如下所示:

代码语言:javascript
复制
[
{'producer': 'HIK', 'state': 'Alabama'},
{'producer': 'HIK', 'state': 'Alaska'},
{'producer': 'TF Inc.', 'state': 'Alabama'},
{'producer': 'TF Inc.', 'state': 'Arizona'},
{'producer': 'TF Inc.', 'state': 'California'},
]

为了解决这个问题,我首先获得所有唯一的生产者名称:

代码语言:javascript
复制
producer_unique_list = []
    for producer in asset_list:
        if producer['producer'] not in producer_unique_list:
            producer_unique_list.append(producer['producer'])

然后将每个资产的生产者与producer_unique_list进行比较,只添加(生产者、状态)是唯一的条目:

代码语言:javascript
复制
producer_list = []
    run_once = True
    for ass in asset_list:
        p_d = dict()
        if run_once:
            p_d['producer'] = ass['producer']
            p_d['state'] = ass['state']
            producer_list.append(p_d)
            run_once = False
        else:
            for y in producer_list:
                if ass['producer'] != y['producer'] or ass['state'] != y['state']:
                    p_d = dict()
                    p_d['producer'] = ass['producer']
                    p_d['state'] = ass['state']
                    producer_list.append(y)

但这一逻辑似乎行不通。有谁能提出解决这个问题的好办法吗?谢谢

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-12-13 15:04:57

您可以从基于生产者和状态构建一组元组开始。使用集合将处理复制问题。您可以根据集合构建字典列表,如下所示:

代码语言:javascript
复制
asset_list = [
    {'cid': 60, 'client_id': '232-00000004', 'prem_id': 'PID-1', 'state': 'Alabama',
        'rid': 103, 'total_premid': 0, 'total_site': 0, 'producer': 'HIK'},
    {'cid': 60, 'client_id': '232-00000004', 'prem_id': 'PID-2', 'state': 'Alaska',
        'rid': 104, 'total_premid': 0, 'total_site': 0, 'producer': 'HIK'},
    {'cid': 64, 'client_id': '232-00000008', 'prem_id': 'PID-3', 'state': 'Alabama',
        'rid': 105, 'total_premid': 0, 'total_site': 0, 'producer': 'TF Inc.'},
    {'cid': 64, 'client_id': '232-00000008', 'prem_id': 'PID-3', 'state': 'Alabama',
        'rid': 105, 'total_premid': 0, 'total_site': 0, 'producer': 'TF Inc.'},
    {'cid': 64, 'client_id': '232-00000008', 'prem_id': 'PID-4', 'state': 'Arizona',
        'rid': 106, 'total_premid': 0, 'total_site': 0, 'producer': 'TF Inc.'},
    {'cid': 64, 'client_id': '232-00000008', 'prem_id': 'PID-5', 'state': 'California',
        'rid': 107, 'total_premid': 0, 'total_site': 0, 'producer': 'TF Inc.'},
    {'cid': 60, 'client_id': '232-00000004', 'prem_id': 'PID-7', 'state': 'Alabama',
        'rid': 108, 'total_premid': 0, 'total_site': 0, 'producer': 'HIK'}

]
s = set()
for a in asset_list:
    s.add((a['producer'], a['state']))
out = [{'producer': i[0], 'state': i[1]} for i in s]
print(out)
票数 1
EN

Stack Overflow用户

发布于 2021-12-13 14:57:35

通过下面的代码,我能够获得所需的结果:

代码语言:javascript
复制
unique_values_set = set([tuple((entry["producer"], entry["state"])) for entry in asset_list])

unique_dict_list = [{'producer': value[0], 'state': value[1]} for value in unique_values_set]
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70336489

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档