gpt4 book ai didi

python - 尝试有条件地将元组列表中的元组附加到字典中的元组子列表

转载 作者:太空宇宙 更新时间:2023-11-04 02:07:45 27 4
gpt4 key购买 nike

我不知道如何实现我想要的,所以我在这里发帖。

我有一个字典,其中每个值都是一个元组列表(我将其称为 dict1),我将它与一个元组列表进行交叉引用(我将其称为 列表 1)。这个想法是将 list1 中的任何元组附加到 dict1 中的每个子列表,如果它不以 (tuple, 0) 的形式存在于子列表中的话。

这是它的样子:

dict1 = {2011: [('Debt collection', 5572),
('Mortgage', 4483),
('Student loan', 431)],
2012: [('Consumer Loan', 480),
('Student loan', 1632),
('Medical loan', 1632),
('Prepaid card', 83)]}

list1 = [('Debt collection', 5572),
('Mortgage', 4483),
('Credit reporting', 3230),
('Checking or savings account', 2068),
('Student loan', 1632),
('Credit card or prepaid card', 1577),
('Bank account or service', 1327),
('Credit card', 1156),
('Consumer Loan', 480)]

我希望我的代码检查 list1 中每个元组的第一部分是否存在于 dict1 的每个值列表中,如果不存在,则以 (tuple, 0) 的形式将其附加到每个值列表中:

dict1 = {2011: [('Debt collection', 5572),
('Mortgage', 4483),
('Student loan', 431),
('Credit reporting', 0),
('Checking or savings account', 0),
('Credit card or prepaid card', 0),
('Bank account or service', 0),
('Credit card', 0),
('Consumer Loan', 0)],
2012: [('Consumer Loan', 480),
('Student loan', 1632),
('Medical loan', 1632),
('Prepaid card', 83),
('Debt collection', 0),
('Mortgage', 0),
('Credit reporting', 0),
('Checking or savings account', 0),
('Credit card or prepaid card', 0),
('Bank account or service', 0),
('Credit card', 0)]}

我首先尝试将 list1 中每个元组的第一部分提取为单独的列表:

 available = [tpl[0] for tpl in list1]

然后我尝试以下操作:

 dict1.update(v.extend(tuple((tpl[0],0)) for tpl in v \ 
for k, v in dict1.items() \
if tpl[0] not in available))

我收到以下错误:

TypeError                                 Traceback (most recent call last)
<ipython-input-79-53b4b903b6f4> in <module>()
----> 1 dict1.update(v.extend(list(tuple((tpl[0],0)) for tpl in v for k, v in dict1.items()
if tpl[0] not in available)))

<ipython-input-79-53b4b903b6f4> in <genexpr>(.0)
----> 1 dict1.update(v.extend(list(tuple((tpl[0],0)) for tpl in v for k, v in dict1.items()
if tpl[0] not in available)))

TypeError: 'generator' object is not subscriptable

我一直在寻找,但没有找到任何真正涉及类似案例的内容。我假设我必须对 dict1 使用 .update 并在每个值列表 (v) 上使用 .extend 以便单独处理每个列表。

最佳答案

你可以将每个值临时转换成一个dict,使用get来保证值的全补,然后写回一个列表。这不需要导入:

for k in dict1:
d = dict(dict1[k])
dict1[k] = [(item, d.get(item, 0)) for item, _ in list1]

如果你想在输出中有一个字典,最后一行几乎没有变化:

dict1[k] = {item: d.get(item, 0)) for item, _ in list1}

或者,如果顺序很重要并且您使用的是 Python < 3.6:

dict1 = OrderedDict(item, d.get(item, 0)) for item, _ in list1)

虽然我不鼓励你这样做,但一个类轮是可能的:

dict1 = {k: [(item, d.get(item, 0)) for item, _ in list1] for k, d in ((k, dict(v)) for k, v in dict1.items())}

关于python - 尝试有条件地将元组列表中的元组附加到字典中的元组子列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54272876/

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