-2

所以我有几个列表是数据文件中变量的标题。设置如下所示:

headerGroup1 = ["1", "2", "3, "4", "5"]
headerGroup2 = ["6", "7", "8, "9", "10"]
headerGroup3 = ["1", "2", "3", "4", "5"]

我有一个如下所示的主文件:

masterVars = ["1", "2", "3", "4", "5", "6", "7", "8", "9", "10"]

我想做三件事:

  • 创建一个列表,其中按顺序包含 masterVars 中的所有项目。而且我不知道值是否是唯一的。
  • 如果 headerGroupX 中包含的列表项位于 masterVars 中,则将该标题组添加到列表项中。
  • 将包含所有 64k 项的列表转储到我可以在 SPSS 中管理的内容中(有点开玩笑)

如果只有 2 个列表,我认为这会很简单。我认为我遇到的最大问题是在将数据添加到列表项之后会发生什么。但我不完全确定我在搞砸什么。

编辑:

这是我想要输出的示例:

newMasterFile = ["headerGroup1, headerGroup3, 1", "headerGroup1, headerGroup3, 2", etc.]

这会让事情变得更清楚吗?

4

2 回答 2

1
import functools # python3 compatibility (for reduce function)

# unsorted - see 3,4 are swaped!
masterVars = ["1", "2", "4", "3", "5", "6", "7", "8", "9", "10"]

input_dict=dict(headerGroup1 = ["1", "2", "3", "4", "5"],headerGroup2 = ["6", "7", "8", "9", "10"],headerGroup3 = ["1", "2", "3", "4", "5"])

# used builtins sorted function for sorting 
new_master_file=[' '.join(j[0])+' '+j[1] for j in [functools.reduce(lambda a,b:(i in input_dict[b] and a[0]+[b] or a[0],i),input_dict,[[],i]) for i in sorted(masterVars,key=int)]]

for i in new_master_file:
    print (i)

还是您喜欢更具可读性的版本?;)

PS。什么是SPSS?

于 2012-11-01T09:18:19.947 回答
0

创建一个列表,其中按顺序包含 masterVars 中的所有项目。而且我不知道值是否是唯一的。

它已经“排序”(用引号引起来,因为你从不解释你想要什么顺序),但假设它不是:

>>> shuffle(masterVars)
>>> masterVars ['2', '9', '5', '7', '4', '1', '10', '6', '8', '3']
>>> sort(masterVars, key=lambda x: int(x))
['1', '2', '3', '4', '5', '6', '7', '8', '9', '10']

如果您不知道这些值是否唯一,并且希望它们是唯一的,请将其转换为set.

如果 headerGroupX 中包含的列表项位于 masterVars 中,则将该标题组添加到列表项中。

new_list = []
for i in headerGroupX:
   if i in masterVars:
      new_list.append(','.join(headerGroupX)+','+i)
   else:
      new_list.append(i)
于 2012-11-01T07:44:50.500 回答