Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/333.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/199.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从Python中的列表列表生成集合_Python_List_Set - Fatal编程技术网

从Python中的列表列表生成集合

从Python中的列表列表生成集合,python,list,set,Python,List,Set,我有以下表格中的列表: testdata = [['9034968', 'ETH'], ['14160113', 'ETH'], ['9034968', 'ETH'], ['11111', 'NOT'], ['9555269', 'NOT'], ['15724032', 'ETH'], ['15481740', 'ETH'], ['15481757', 'ETH'], ['15481724', 'ETH'],

我有以下表格中的列表:

testdata = [['9034968', 'ETH'],  ['14160113', 'ETH'],  ['9034968', 'ETH'],  
            ['11111', 'NOT'], ['9555269', 'NOT'],  ['15724032', 'ETH'],  
            ['15481740', 'ETH'],  ['15481757', 'ETH'],  ['15481724', 'ETH'],   
            ['10307528', 'ETH'],  ['15481757', 'ETH'],  ['15481724', 'ETH'],
            ['15481740', 'ETH'],  ['15379365', 'ETH'],  ['11111', 'NOT'],
            ['9555269', 'NOT'],  ['15379365', 'ETH']]
我希望得到一个最终结果,将唯一名称与其值分组。 因此,在最终列表中(或词典,或任何可数词)只有两个名称(ETH和NOT) 将列表作为所有其他值的第二项,例如:

In [252]: unique_names
Out[252]: 
{'ETH': ['9034968',
  '14160113',
  '9034968',
  '15724032',
  '15481740',
  '15481757',
  '15481724',
  '10307528',
  '15481757',
  '15481724',
  '15481740',
  '15379365',
  '15379365'],
 'NOT': ['11111', '9555269', '11111', '9555269']}
为此,我使用了字典和以下步骤:

unique_names = []

for (x,y) in testdata: 
    if y not in unique_names:
       unique_names.append(y)

# now unique_names is ['ETH', 'NOT']

unique_names = {name:list() for name in unique_names}

for (x,y) in testdata: unique_names[y]=unique_names[y]+[x]

#so finally I get the result above
我的问题是:

  • test_data
    是一个包含1000个条目的SQL查询的结果。我的解决方案运行得很慢(至少感觉如此)
  • 你能用一种更像蟒蛇的方式来做这件事吗

此问题的示例数据取自关于集合和列表的类似问题:。不幸的是,OP希望得到不同的结果,但数据结构足够合适

您可以像这样使用
defaultdict

from collections import defaultdict
d = defaultdict(list)

for (value, key) in testdata:
    d[key].append(value)

print d
或者用普通字典

d = {}
for (value, key) in testdata:
    d.setdefault(key, []).append(value)
print d

这两个例子都基于相同的想法。它们根据键将值分组为一个列表。
dict.setdefault
将为该键分配默认值,如果该键在字典中不存在,则返回该值。我们只是不断地将值添加到与键对应的列表中。

您可以像这样使用
defaultdict

from collections import defaultdict
d = defaultdict(list)

for (value, key) in testdata:
    d[key].append(value)

print d
或者用普通字典

d = {}
for (value, key) in testdata:
    d.setdefault(key, []).append(value)
print d

这两个例子都基于相同的想法。它们根据键将值分组为一个列表。
dict.setdefault
将为该键分配默认值,如果该键在字典中不存在,则返回该值。我们只是不断地将值添加到与键对应的列表中。

您可以像这样使用
defaultdict

from collections import defaultdict
d = defaultdict(list)

for (value, key) in testdata:
    d[key].append(value)

print d
或者用普通字典

d = {}
for (value, key) in testdata:
    d.setdefault(key, []).append(value)
print d

这两个例子都基于相同的想法。它们根据键将值分组为一个列表。
dict.setdefault
将为该键分配默认值,如果该键在字典中不存在,则返回该值。我们只是不断地将值添加到与键对应的列表中。

您可以像这样使用
defaultdict

from collections import defaultdict
d = defaultdict(list)

for (value, key) in testdata:
    d[key].append(value)

print d
或者用普通字典

d = {}
for (value, key) in testdata:
    d.setdefault(key, []).append(value)
print d

这两个例子都基于相同的想法。它们根据键将值分组为一个列表。
dict.setdefault
将为该键分配默认值,如果该键在字典中不存在,则返回该值。我们只是不断地将值附加到与键对应的列表中。

您不是在创建集合列表,而是在创建字典列表。@Matthias,type(unique_names)显示一个dict。但这并不重要,就像我说的,我需要对每个键的值集进行某种类型的iterable。您不是在创建集合列表,但是一个字典列表。@Matthias,type(unique_names)显示一个dict。但这并不重要,就像我说的,我需要对每个键的值集进行某种类型的iterable。你不是在创建一个集合列表,而是一个字典列表。@Matthias,type(unique_names)显示一个dict。但这并不重要,就像我说的,我需要对每个键的值集进行某种类型的iterable。你不是在创建一个集合列表,而是一个字典列表。@Matthias,type(unique_names)显示一个dict。但这并不重要,就像我说的,我需要对每个键的值集进行某种类型的iterable。我会被诅咒的,这在优秀的python文档中有很好的记录!我会被诅咒的,这在优秀的python文档中有很好的记录!我会被诅咒的,这在优秀的python文档中有很好的记录!我会被诅咒的,这在优秀的python文档中有很好的记录!