gpt4 book ai didi

python - 如何使用列表项来寻址字典键并附加相应的值

转载 作者:太空宇宙 更新时间:2023-11-03 19:13:50 42 4
gpt4 key购买 nike

我有一个包含客户信息的列表,客户列表中的每一项本身就是一组相应信息的列表。所以:

customers = [
[customerID1, NameOfCustomer1, etc., 01 02 03]
[customerID2, NameOfCustomer2, etc., 02 05]
.
.
.
]

每个客户信息集中的数字是我需要将客户分配到的类别。也就是说,我有一本有 n 个键的字典,每个键对应一个类别:

dict = {
01: [],
02: [],
03: [],
04: [],
05: []
}

现在,我需要将客户分配到各自的类别,以便客户 1 最终属于类别一、类别二和类别三,而客户二则分为类别二和类别五。当然,我可以运行 n 个 if 语句,每个现有类别一个,但随着类别数量的增加,我发现这相当令人不安。因此我想做的是:从每个客户那里获取类别列表:

for customer in customers:
categories = re.findall(r'[0-9]{2}', customer[3])

简单的部分就讲到这里。现在我正在寻找一种基本上循环此“类别”列表的方法:

for category in categories:
dict[category].append(customer)

但是,python似乎不喜欢我使用变量来选择键。对于这个问题可能有一个非常简单的解决方案 - 我只是不知道。

非常感谢大家!

最佳答案

第 1 步是将这些平面列表转换为字典,这对于访问属性更有用。我不得不想象您的数据实际上是什么样子,但您应该明白:

>>> customers = [
... ['customerID1', 'NameOfCustomer1', 'e','t','c', '01 02 03'],
... ['customerID2', 'NameOfCustomer2', 'e','t','c', '02 05']
... ]
>>>
>>> cust_keys = ('id', 'name', 'q1','q2','q3','categories')
>>> cdicts = [dict(zip(cust_keys, cust_vals)) for cust_vals in customers]
>>> cdicts
[{'q1': 'e', 'q3': 'c', 'q2': 't', 'name': 'NameOfCustomer1', 'id': 'customerID1', 'categories': '01 02 03'}, {'q1': 'e', 'q3': 'c', 'q2': 't', 'name': 'NameOfCustomer2', 'id': 'customerID2', 'categories': '02 05'}]

最好将类别作为代码列表,并且我们不需要正则表达式:

>>> for cdict in cdicts:
... cdict['categories'] = cdict['categories'].split()
...
>>> cdicts
[{'q1': 'e', 'q3': 'c', 'q2': 't', 'name': 'NameOfCustomer1', 'id': 'customerID1', 'categories': ['01', '02', '03']}, {'q1': 'e', 'q3': 'c', 'q2': 't', 'name': 'NameOfCustomer2', 'id': 'customerID2', 'categories': ['02', '05']}]

现在,为了附加到一堆类别列表,我们可以每次检查该键是否存在,如果不存在则创建一个空列表,或者我们可以使用一个 defaultdict为我们处理这个问题:

>>> from collections import defaultdict
>>> by_categories = defaultdict(list)
>>> for customer in cdicts:
... for category in customer['categories']:
... by_categories[category].append(customer)
...

产生

>>> for k in sorted(by_categories):
... print 'category', k, 'contains:'
... for v in by_categories[k]:
... print v
...
category 01 contains:
{'q1': 'e', 'q3': 'c', 'q2': 't', 'name': 'NameOfCustomer1', 'id': 'customerID1', 'categories': ['01', '02', '03']}
category 02 contains:
{'q1': 'e', 'q3': 'c', 'q2': 't', 'name': 'NameOfCustomer1', 'id': 'customerID1', 'categories': ['01', '02', '03']}
{'q1': 'e', 'q3': 'c', 'q2': 't', 'name': 'NameOfCustomer2', 'id': 'customerID2', 'categories': ['02', '05']}
category 03 contains:
{'q1': 'e', 'q3': 'c', 'q2': 't', 'name': 'NameOfCustomer1', 'id': 'customerID1', 'categories': ['01', '02', '03']}
category 05 contains:
{'q1': 'e', 'q3': 'c', 'q2': 't', 'name': 'NameOfCustomer2', 'id': 'customerID2', 'categories': ['02', '05']}

关于python - 如何使用列表项来寻址字典键并附加相应的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12074833/

42 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com