Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.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
如何对defaultdict(list)进行排序,以便所有列表都基于一个键进行排序?_List_Python 2.7_Sorting_Csv - Fatal编程技术网

如何对defaultdict(list)进行排序,以便所有列表都基于一个键进行排序?

如何对defaultdict(list)进行排序,以便所有列表都基于一个键进行排序?,list,python-2.7,sorting,csv,List,Python 2.7,Sorting,Csv,对于所有优秀的程序员 我想知道如何对defaultdict(list)集合进行排序,以便将一个列表(例如defaultdict(list)[list1])的排序顺序也应用于其余列表。也许简短的描述/示例更有用。如果有更好的方法,我也会洗耳恭听 示例问题: 我有一个.csv文件,由许多列(不同的数据类型)和一条标题线组成。使用defaultdict(列表)导入.csv文件时使用: data = defaultdict(list) Reader = csv.DictReader(open(FileP

对于所有优秀的程序员

我想知道如何对defaultdict(list)集合进行排序,以便将一个列表(例如defaultdict(list)[list1])的排序顺序也应用于其余列表。也许简短的描述/示例更有用。如果有更好的方法,我也会洗耳恭听

示例问题: 我有一个.csv文件,由许多列(不同的数据类型)和一条标题线组成。使用defaultdict(列表)导入.csv文件时使用:

data = defaultdict(list)
Reader = csv.DictReader(open(FilePath, 'r'))
for (k,v) in row.items():
    data[k].append(v)
现在我只剩下一个名为“data”的defaultdict(列表)结构:

data = [('varA', <list of n time.struct_time items>),
        ('varB', <list of n other data type items>)',
        ('varC', <list of n other data type items>)']
返回索引顺序正确的列表。是否有方法将此顺序应用于其他列表

注:我在某个地方读到

data[varB] = data[varB][sortOrder] 
data[varC] = data[varC][sortOrder] 
如果sortOrder是一个数组(它不是,上面的结果是一个列表),那么请给出正确的答案。问题是,在不使用numpy的情况下,如何将排序器列表转换为数组。

我想我应该:

  • 将列表VarA与数字1到n配对,以便:
    • [b,a,c]
      变成
      [(1,b)、(2,a)、(3,c)]
  • 按值对新列表进行排序,以便:
    • [(2,a)、(1,b)、(3,c)]
  • 解开它们,数字的结束方式是其他列表的顺序:
    • [2,1,3]
      如何将列表按顺序排列:选择第二项、第一项、第三项
  • 对于每一行,将该顺序中的项目放入新列表中
未经测试的示例代码:

sort_holder = [(index, item) for (index, item) in enumerate(data['VarA'])]
sort_holder = sorted(sort_holder, key = lambda pair: pair[1])
new_order = [pair[0] for pair in sort_holder]

for var, row in data.items():
    new_list = []
    for index in new_order:
        new_list.append(row[index])
    data[var] = new_list

您的示例代码缺少某些内容;
row.items()
来自哪里?csv中的行是否为
?嘿,伙计,row.items()来自csv模块,与每个行项目关联的键和值对也是如此。这足以回答我的问题。感谢您的快速回复!
sort_holder = [(index, item) for (index, item) in enumerate(data['VarA'])]
sort_holder = sorted(sort_holder, key = lambda pair: pair[1])
new_order = [pair[0] for pair in sort_holder]

for var, row in data.items():
    new_list = []
    for index in new_order:
        new_list.append(row[index])
    data[var] = new_list