我有一个阵列数组,格式如下:
x = [["Username1","id3"],
["Username1", "id4"],
["Username1", "id4"],
["Username3", "id3"]]
我想按ID分组并显示所有唯一的用户名 我如何获得类似的输出:
id3:用户名1,用户名3
id4:用户名1
编辑:能够按第二列分组,但我不仅可以显示唯一值。这是我的代码:
data={}
for key, group in groupby(sorted(x), key=lambda x: x[1]):
data[key]=[v[0] for v in group]
print(data)
答案 0 :(得分:1)
使用dict
按 id 和pythons sets创建唯一键来存储值(因此您只能存储该键的唯一名称):
items = [
["Username1","id3"],
["Username1", "id4"],
["Username1", "id4"],
["Username3", "id3"]
]
data = {}
for item in items:
if data.has_key(item[1]):
data[item[1]].add(item[0])
else:
data[item[1]] = set([item[0]])
print(data)
答案 1 :(得分:0)
您可以使用for循环,但使用linq语句可能更清晰,以备将来使用。
https://stackoverflow.com/a/3926105/4564614
有一些很好的方法可以合并linq来解决这个问题。我认为你要找的是分组。
示例:
from collections import defaultdict
from operator import attrgetter
def group_by(iterable, group_func):
groups = defaultdict(list)
for item in iterable:
groups[group_func(item)].append(item)
return groups
group_by((x.foo for x in ...), attrgetter('bar'))