在Python中创建唯一键列表

时间:2013-11-26 18:26:36

标签: python python-2.7

我有一个

列表
[{"1":"value"},{"1":"second_value"},{"2":"third_value"},{"2":"fourth_value"},{"3":"fifth_value"}]

希望将其转换为

[{"1":"value","2":"third_value","3":"fifth_value"},{"1":"second_value","2":"fourth_value"}]

3 个答案:

答案 0 :(得分:1)

可能有一种更简洁的方法,我很感激输入:

d = [{"1":"value"},{"1":"second_value"},{"2":"third_value"},{"2":"fourth_value"},{"3":"fifth_value"}]

results = [{}]
for item in stuff:
    j,k = item.items()[0]  // Do the initial dicts always contain one key-value pair?
    for result in results:
        if j not in result:
            result[j] = k
            break
        if result == results[-1]:
            results.append(item)
            break

结果:

[{'1': 'value', '3': 'fifth_value', '2': 'third_value'}, {'1': 'second_value', '2': 'fourth_value'}]

答案 1 :(得分:0)

您可以使用collections.defaultdict

>>> import collections
>>> result = collections.defaultdict(list)
>>> for item in d:
...     result[item.values()[0]].append(item.keys()[0])
...
>>> [{key: value for key in keys} for value, keys in result.items()]
[{'1': 'second_value', '2': 'second_value'}, {'1': 'value', '3': 'value', '2': 'value'}]

请注意second_valuevalue之前,因为排序相当随意(除非您明确指定value应在second_value之前订购以上给你字典返回的顺序。

答案 2 :(得分:0)

您可以在此处使用collections.defaultdict。遍历列表,使用值作为键并收集与列表中的值相关的所有键。

>>> from collections import defaultdict
>>> d = defaultdict(list)                                                            
for dic in lis:
    for k, v in dic.items():
        d[v].append(k)
...

现在d变为:

>>> d
defaultdict(<type 'list'>,
{'second_value': ['1', '2'],
 'value': ['1', '2', '3']})

现在迭代d以获得所需的结果:

>>> [{v1:k for v1 in v} for k, v in d.items()]
[{'1': 'second_value', '2': 'second_value'}, {'1': 'value', '3': 'value', '2': 'value'}]