仅保留setdefaults di中的唯一值

2024-10-02 02:25:40 发布

您现在位置:Python中文网/ 问答频道 /正文

我使用collections模块中的setdefault()函数生成两个tables/dict。第一个dict是从压缩的两个列表中创建的,其中第一个item元素成为键,第二个元素成为值,这样每个键可以有任意数量的值。有没有办法排除每个键的重复值?在

keylst = ['a','a','b','b','a','b']
vallst = [1,1,2,2,3,3]

zip = [('a',1),('a',1),('b',2),('b',2),('a',3),('b',3)]
result = a[1,1,3], b[2,2,3]

desired_result = a[1,3], b[2,3]

以下是我目前为止的代码:

^{pr2}$

Tags: 模块函数元素列表tables数量resultzip
2条回答

理想情况下,如果您可以创建一个OrderedSet对象的字典,它将保持顺序保证只有唯一的值同时添加到它。在

不幸的是,Python没有这样的内置类,但是可以使用OrderedDict来代替它。使用set(或dict)的优点是成员资格检查的唯一性将比使用简单的list来收集值更快。在

我的意思是:

from collections import OrderedDict

keylst = ['a','a','b','b','a','b']
vallst = [1,1,2,2,3,3]

result = {}
for k,v in zip(keylst, vallst):
    result.setdefault(k, OrderedDict())[v] = 1

# convert final values in result dictionary into lists
for key, value in result.items():
    result[key] = list(value.keys())  # In Python 2.x, just use = values.keys()

print(result)  # -> {'a': [1, 3], 'b': [2, 3]}

另外,这里有一个由raymondhettinger编写的OrderedSetrecipe,你可以用上面的代码用OrderedDict来模拟一个。在

如果不关心顺序,可以将setdefault更改为

TpRtDct.setdefault(key,set()).add(item)

另外,请记住,在添加defaultdict之后,它被认为更易于编写

^{pr2}$

相关问题 更多 >

    热门问题