gpt4 book ai didi

python - 在保留值的同时计算并删除键中的重复项

转载 作者:行者123 更新时间:2023-11-28 22:30:37 25 4
gpt4 key购买 nike

我整理了一些资料,整理成字典如下:

gen_dict = {
"item_C_v001" : "jack",
"item_C_v002" : "kris",
"item_A_v003" : "john",
"item_B_v006" : "peter",
"item_A_v005" : "john",
"item_A_v004" : "dave"
}

我正在尝试以下列格式打印结果:

Item Name     | No. of Vers.      | User
item_A | 3 | dave, john
item_B | 1 | peter
item_C | 2 | jack, kris

它会把相似的版本列表成一行,同时统计有多少个版本,同时说明用户名..

我在整合用户名时遇到了问题。我使用了 set() 命令,这似乎适用于我所有的 3 行输出。即便如此,虽然我的'项目名称'和'没有。的 Vers。列似乎是正确的,有什么方法可以检查它找到的版本数是否符合名称?如果我有小数据,我可以手动统计它,但如果我有大数据怎么办?

strip_ver_list = []
user_list = []
for item_name, user in gen_dict.iteritems():
# Strip out the version digits
strip_ver = item_name[:-3]
strip_ver_list.append(strip_ver)
user_list.append(user)


# This will count and remove the duplicates
versions_num = dict((duplicate, strip_ver_list.count(duplicate)) for duplicate in strip_ver_list)

for name, num in sorted(versions_num.iteritems()):
print "Version Name : {0}\nNo. of Versions : {1}\nUsers : {2}".format(name, num, set(user_list))

这是我得到的输出:

Item Name     | No. of Vers.      | User
item_A | 3 | set(['dave', 'john', 'jack', 'kris', 'peter'])
item_B | 1 | set(['dave', 'john', 'jack', 'kris', 'peter'])
item_C | 2 | set(['dave', 'john', 'jack', 'kris', 'peter'])

这是我唯一能想到的方法..但是如果有任何其他可行的方法来解决这个问题,请与我分享

最佳答案

我会使用 defaultdict 来聚合数据。大致:

>>> from collections import defaultdict
>>> gen_dict = {
... "item_C_v001" : "jack",
... "item_C_v002" : "kris",
... "item_A_v003" : "john",
... "item_B_v006" : "peter",
... "item_A_v005" : "john",
... "item_A_v004" : "dave"
... }

现在...

>>> versions_num = defaultdict(lambda:dict(versions=set(), users = set()))
>>> for item_name, user in gen_dict.items():
... strip_ver = item_name[:-5]
... version_num = item_name[-3:]
... versions_num[strip_ver]['versions'].add(version_num)
... versions_num[strip_ver]['users'].add(user)
...

最后,

>>> for item, data in versions_num.items():
... print("Item {} \tno. of Versions: {}\tUsers:{}".format(item, len(data['versions']), ",".join(data['users'])))
...
Item item_B no. of Versions: 1 Users:peter
Item item_A no. of Versions: 3 Users:john,dave
Item item_C no. of Versions: 2 Users:kris,jack
>>>

如果你想要它排序:

>>> for item, data in sorted(versions_num.items()):
... print("Item {} \tno. of Versions: {}\tUsers:{}".format(item, len(data['versions']), ",".join(data['users'])))
...
Item item_A no. of Versions: 3 Users:john,dave
Item item_B no. of Versions: 1 Users:peter
Item item_C no. of Versions: 2 Users:kris,jack

关于python - 在保留值的同时计算并删除键中的重复项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42076644/

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