我正在尝试从列表中删除重复并使用php(0,1,2 ....)等密钥创建字典。
我试过了:
ids = dict(set([1,2,2,2,3,4,5,4,5,6]))
print ids
然后我想
for key, value in ids.iteritems():
#stuff
当然我收到以下错误,因为ids不是字典:
TypeError: cannot convert dictionary update sequence element #0 to a sequence
谢谢!
修改
我认为我的数据有点误导:
我有一个列表:[foo, bar, foobar, barfoo, foo, foo, bar]
我希望将其转换为:{ 1: 'foo', 2 : 'bar', 3 : 'foobar', 4: 'barfoo'}
我不介意做空。
答案 0 :(得分:2)
要将一组值转换为一个字典,并从序列中选择已排序的“键”,请使用带计数器的defaultdict
指定键:
from collections import defaultdict
from itertools import count
from functools import partial
keymapping = defaultdict(partial(next, count(1)))
outputdict = {keymapping[v]: v for v in inputlist}
这会将数字(从1开始)指定为输入列表中值的键,先到先得。
演示:
>>> from collections import defaultdict
>>> from itertools import count
>>> from functools import partial
>>> inputlist = ['foo', 'bar', 'foobar', 'barfoo', 'foo', 'foo', 'bar']
>>> keymapping = defaultdict(partial(next, count(1)))
>>> {keymapping[v]: v for v in inputlist}
{1: 'foo', 2: 'bar', 3: 'foobar', 4: 'barfoo'}
答案 1 :(得分:1)
不确定您打算与set
中的每个键相关联的值。
你可以使用理解:
ids = {x: 0 for x in set([1,2,2,2,3,4,5,4,5,6])}
答案 2 :(得分:1)
您可以使用zip。
示例代码
>>> ids
['foo', 'bar', 'foobar', 'barfoo', 'foo', 'foo', 'bar']
>>> dict(zip(range(1,len(ids)+1), sorted(set(ids))))
{1: 'bar', 2: 'barfoo', 3: 'foo', 4: 'foobar'}
>>>
如果你想用0开始键,那么Aya的灵魂就更好了。
>>> ids
['foo', 'bar', 'foobar', 'barfoo', 'foo', 'foo', 'bar']
>>> dict(enumerate(sorted(set(ids))))
{0: 'bar', 1: 'barfoo', 2: 'foo', 3: 'foobar'}