gpt4 book ai didi

python - 有效地将索引附加到 Python 中的重复字符串

转载 作者:太空宇宙 更新时间:2023-11-04 11:10:19 24 4
gpt4 key购买 nike

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

[
{'name': 'a', 'value': 'x'},
{'name': 'a', 'value': 'x'},
{'name': 'a', 'value': 'x'},
{'name': 'b', 'value': 'x'},
{'name': 'b', 'value': 'x'},
{'name': 'c', 'value': 'x'}
]

我想把它转换成这样的字典

{
'a-0': 'x',
'a-1': 'x',
'a-2': 'x',
'b-0': 'x',
'b-1': 'x',
'c': 'x'
}

因此,对于任何重复的名称,我想在所有实例的末尾附加一个索引,但如果名称不重复,则应该保留它。

我已经编写了一个函数来执行此操作,但我认为它不是非常有效或通常令人愉快。

def transform(mylist):
names = [x['name'] for x in mylist]
duplicates = {x: 0 for x in names if names.count(x) > 1}
out = {}
for row in mylist:
key = row['name']
value = row['value']
if key in duplicates:
newkey = "{key}-{index}".format(key=key, index=duplicates[key])
duplicates[key] = duplicates[key] + 1
else:
newkey = key
out[newkey] = value
return out

有更好的方法吗?

最佳答案

你可以这样做:

lst = [
{'name': 'a', 'value': 'x'},
{'name': 'a', 'value': 'x'},
{'name': 'a', 'value': 'x'},
{'name': 'b', 'value': 'x'},
{'name': 'b', 'value': 'x'},
{'name': 'c', 'value': 'x'}
]

d = {}
for e in lst:
d.setdefault(e['name'], []).append(e['value'])

result = {}
for key, values in d.items():
if len(values) > 1:
for i, value in enumerate(values):
result[f'{key}-{i}'] = value
else:
result[key] = values[0]

print(result)

输出

{'a-0': 'x', 'a-1': 'x', 'a-2': 'x', 'b-0': 'x', 'b-1': 'x', 'c': 'x'}

关于python - 有效地将索引附加到 Python 中的重复字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58430884/

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