【问题标题】:How to merge the items of list if they are same and append if items are not same in Python如果列表中的项目相同,如何合并,如果项目不同,如何在 Python 中追加
【发布时间】:2020-08-25 07:18:06
【问题描述】:

我有一个列表 tags,其中包含以下 dict 数据

tags = [ {'Time': 1, 'Name': 'John'} ]

我从一个函数中得到tags 值。有时收到的值具有相同的Name,所以在这种情况下,我需要简单地获取它的Time 值并更新列表。例如,如果收到以下数据:

tags = [ {'Time': 4, 'Name': 'John'} ]

在这种情况下,由于Name 相同,所以我将简单地获取Time 值并更新tags 列表,因此输出将是:

output = [ {'Time': 4, 'Name': 'John'} ]

时间已从 1 变为 4。但假设收到了新的 Name,例如以下:

tags = [ {'Time': 10, 'Name': 'John'}, {'Time': 6, 'Name': 'Karan'} ]

所以在这种情况下,John 时间将被更新,Karan 时间数据将被附加到列表中,因此输出将是

output = [ {'Time': 10, 'Name': 'John'}, {'Time': 6, 'Name': 'Karan'} ]

所以对于 John,我们更新了时间并添加了 Karan 数据。

我有output_tags 作为dict,其中有一个tags 作为list。我正在执行以下操作:

output_tags['Tags'].clear()
for tag in tags:
    output_tags['Tags'].append(tag)

现在上面的代码正在清除我们在output_tags['Tags'] 中的所有数据,然后简单地附加所有数据。因此,这样我们将更新相同的Name 时间并附加收到的任何新Name

但是使用这段代码,我正在清除我以前拥有的所有数据。例如,有时我收到了Ellis 数据,但现在我没有收到Ellis 数据。我仍然需要保留Ellis 数据,但它已被清除。有没有其他方法可以解决这个问题。请帮忙。谢谢

【问题讨论】:

  • 为什么不将该列表转换为字典{"John": 1}?然后更新是微不足道的,您可以轻松地再次输出字典列表,例如[{"Time": value, "Name": key} for key, value in tag_dict.items()].

标签: python list append


【解决方案1】:

您可以合并两个标签列表:

from collections import defaultdict

tags = [ {'Time': 10, 'Name': 'John'}, {'Time': 6, 'Name': 'Karan'} ]
new_tags = [ {'Time': 30, 'Name': 'Bob'}, {'Time': 40, 'Name': 'Karan'} ]

d = defaultdict(dict)
# using defaultdict(dict), whatever the key your using, it will be initiated with a dict : `d['random_key'] == {}` is True

# we fill d with all tags and new_tags using `Name` as key
for list_ in (tags, new_tags):
    for obj in list_:
        # if `obj['Name']` has already been set, it is updated
        # otherwise it is added
        d[obj['Name']].update(obj)

# display only values and make it a list
results = list(d.values())

print(results)

# [{'Time': 10, 'Name': 'John'}, {'Time': 40, 'Name': 'Karan'}, {'Time': 30, 'Name': 'Bob'}]

【讨论】:

  • 我加了一些cmets
猜你喜欢
  • 1970-01-01
  • 2021-07-02
  • 1970-01-01
  • 1970-01-01
  • 2021-07-16
  • 1970-01-01
  • 2011-07-19
  • 1970-01-01
  • 2010-11-14
相关资源
最近更新 更多