Python中列表列表中的唯一值

时间:2015-07-29 08:19:05

标签: python python-2.7

我在python中有以下列表列表:

[
    u'aaaaa', 
    [1, 6, u'testing', 20.0, 18.0, 2.0, 'In time'], 
    u'zzzzzz', 
    [1, 6, u'testing', 20.0, 18.0, 2.0, 'In time'], 
    [1, 1, u'xyz ', 30.0, 25.0, 5.0, 'On Going'], 
    [2, 1, u'abcd', 10.0, 8.0, 2.0, 'In time'], 
    u'bbbbb', 
    [1, 6, u'testing', 20.0, 18.0, 2.0, 'In time'], 
    [1, 1, u'xyz ', 30.0, 25.0, 5.0, 'On Going'], 
    [2, 1, u'abcd', 10.0, 8.0, 2.0, 'In time'], 
    [1, 7, u'develop', 20.0, 15.0, 5.0, 'On Going']
]

我想在python中输出以下内容:

[
    [u'aaaaa', [1, 6, u'testing', 20.0, 18.0, 2.0, 'In time']], 
    [u'zzzzzz', [1, 1, u'xyz ', 30.0, 25.0, 5.0, 'On Going'], [2, 1, u'abcd', 10.0, 8.0, 2.0, 'In time']], 
    [u'bbbbb', [1, 7, u'develop', 20.0, 15.0, 5.0, 'On Going']]
]

请建议我如何在python中管理订单。

3 个答案:

答案 0 :(得分:1)

以下内容应该为您提供所需的输出。它使用字典来查找重复的条目。

entries = [
    u'aaaaa', [1, 6, u'testing', 20.0, 18.0, 2.0, 'In time'],
    u'zzzzzz', [1, 6, u'testing', 20.0, 18.0, 2.0, 'In time'], 
    [1, 1, u'xyz ', 30.0, 25.0, 5.0, 'On Going'], 
    [2, 1, u'abcd', 10.0, 8.0, 2.0, 'In time'],
    u'bbbbb', 
    [1, 6, u'testing', 20.0, 18.0, 2.0, 'In time'], 
    [1, 1, u'xyz ', 30.0, 25.0, 5.0, 'On Going'], 
    [2, 1, u'abcd', 10.0, 8.0, 2.0, 'In time'], 
    [1, 7, u'develop', 20.0, 15.0, 5.0, 'On Going']]

d = {}
output = []
entry = []

for item in entries:
    if type(item) == type([]):
        t = tuple(item)
        if t not in d:
            d[t] = 0
            entry.append(item)
    else:
        if len(entry):
            output.append(entry)

        entry = [item]

output.append(entry)

print output

这给出了以下输出:

[[u'aaaaa', [1, 6, u'testing', 20.0, 18.0, 2.0, 'In time']], [u'zzzzzz', [1, 1, u'xyz ', 30.0, 25.0, 5.0, 'On Going'], [2, 1, u'abcd', 10.0, 8.0, 2.0, 'In time']], [u'bbbbb', [1, 7, u'develop', 20.0, 15.0, 5.0, 'On Going']]]

使用Python 2.7进行测试

更新:如果需要列表格式,只需在上面的脚本中将[]添加到item,如下所示::

entry.append([item])

这将提供以下输出:

[[u'aaaaa', [[1, 6, u'testing', 20.0, 18.0, 2.0, 'In time']]], [u'zzzzzz', [[1, 1, u'xyz ', 30.0, 25.0, 5.0, 'On Going']], [[2, 1, u'abcd', 10.0, 8.0, 2.0, 'In time']]], [u'bbbbb', [[1, 7, u'develop', 20.0, 15.0, 5.0, 'On Going']]]]

答案 1 :(得分:0)

如果您想要列表中的所有唯一值:

mylist = [u'nowplaying', u'PBS', u'PBS', u'nowplaying', u'job', u'debate', u'thenandnow']
mylist = [list(x) for x in set(tuple(x) for x in testdata)]
print myset # This is now a set containing all unique values.
# This will not maintain the order of the items

答案 2 :(得分:0)

1)我真的认为你应该查看Python词典。他们会更有意义,看看你想要的那种输出。

2)在这种情况下,如果我理解正确,您希望将包含字符串或列表的元素的列表转换为列表列表。这个列表列表应该有一个起始元素作为字符串,其余元素作为主列表中的以下列表项,直到你点击下一个字符串。 (至少从你的例子看起来就是这样)。

output_list = []
for elem in main_list:
    if isinstance(elem,basestring):
        output_list.append([elem])
    else:
        output_list[-1].append(elem)