gpt4 book ai didi

Python:在列表列表中查找重复项以编辑它们

转载 作者:行者123 更新时间:2023-12-05 03:25:21 25 4
gpt4 key购买 nike

在我的 python 项目中,我有一个这样的列表:

l1 = [['Bacon', 1995,'394'], ['Bacon', 1995, '39-46'], ['Bacon', 1998,'7'], ['Egg', 1998, '122-165'], ['Chicken', 2009, '10'], ['Shrimp', 1994, '67']]

我的目标是将列表写在 word 文档中,我的问题是当名称和年份在列表中重复时(如“培根”和“1995”)我想在一年让他们与众不同。所以结果应该是:

l1 = [['Bacon', 1995a,'394'], ['Bacon', 1995b, '39-46'], ['Bacon', 1998,'7'], ['Egg', 1998, '122-165'], ['Chicken', 2009, '10'], ['Shrimp', 1994, '67']]

我已经试过了:

n = ["a", "b", "c", "d", "e", "f", "g", "h"] # [...]

count = 0
for info in l1:
if info[0] and info[1] in l1:
print(f"{info[1]}{a[count]}")
# para.add_run(info[0])
# para.add_run(f"{info[1]}{n[count]}")
count += 1
else:
print(info[1])
# para.add_run(info[0])
# para.add_run(info[1])

并创建一个新列表,如下所示:

l2 = []
count = 0
for info in l1:
if info[0] and info[1] in l2:
l2.append(info[0], f"{info[1]}{a[count]}", info[2])
count += 1
else:
l2.append((info[0],info[1], info[2]))

但两者都不起作用。

最佳答案

一种使用 collections.defaultdict 的方法.首先在嵌套字典中收集所有内容,然后重新创建列表:

from collections import defaultdict
from string import ascii_letters

l1 = [['Bacon', 1995, '394'], ['Bacon', 1995, '39-46'],
['Bacon', 1998, '7'], ['Egg', 1998, '122-165'],
['Chicken', 2009, '10'], ['Shrimp', 1994, '67']]

index = defaultdict(lambda: defaultdict(list))

# collect
for food, year, page in l1:
index[food][year].append(page)

# re-create list:
res = []
for food, rest in index.items():
for year, pages in rest.items():
if len(pages) == 1:
res.append([food, year, pages[0]])
else:
for letter, page in zip(ascii_letters, pages):
res.append([food, f"{year}{letter}", page])
print(res)

在收集阶段之后 index 看起来像这样(为了清楚起见,我去掉了 defaultdict):

{'Bacon': {1995: ['394', '39-46'], 1998: ['7']},
'Chicken': {2009: ['10']},
'Egg': {1998: ['122-165']},
'Shrimp': {1994: ['67']}}

输出

[['Bacon', '1995a', '394'], ['Bacon', '1995b', '39-46'],
['Bacon', 1998, '7'], ['Egg', 1998, '122-165'],
['Chicken', 2009, '10'], ['Shrimp', 1994, '67']]

您可能还想将没有字母的 year 转换为字符串。这样列表中的类型是一致的。

关于Python:在列表列表中查找重复项以编辑它们,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72026100/

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