【发布时间】:2014-09-03 06:30:17
【问题描述】:
我仍然只有几个月的时间进入 python,所以请原谅丑陋的代码。我有一个由唯一 ID 组成的数据集。考虑这种 3 行的格式,每行有 3 个 ID:
zList = [[1412,2521,53522],
[52632,1342,1453],
[3413,342,25232]]
我正在尝试用一些相应的数据(名字、姓氏、州等)替换每个 ID。理想的输出如下所示:
resultList = [[Bob, Smith, Ohio, Jane, Doe, Texas, John, Smith, Alaska],
[Jim, Bob, California, Jack, White, Virginia, John, Smith, Nevada],
[Hank, Black, Kentucy, Sarah, Hammy, Florida, Joe, Blow, Mississipi]]
我意识到在结果中添加一个新维度会更简洁,因为我实际上是将每个 ID 扩展为一个新列表。我避免了这种情况,因为我认为保持平坦会更容易,而且我害怕迭代超过 2 维的任何东西!愿意考虑所有选项...
我用来匹配的数据是你所期望的:
matchData = [[1412, Bob, Smith, Ohio, lots of additional data],
[2521, Jane, Doe, Texas, Lots of Additional Data],
[3411], Jim, Black, New York, Lots of Additional Data],
[...etc...]]
这是我一直在尝试的方法:
resultList = []
for i, valz in enumerate(zList):
for j, ele in enumerate(valz):
check = False
for k, valm in enumerate(matchData):
if ele == valm[0]:
resultList.append(valm)
check = True
break
if check == False:
print "error during rebuild"
pprint.pprint(resultList, width=400)
现在虽然它几乎可以工作,但它缺少我无法弄清楚的 2 个关键问题。我的代码将所有内容转储到一个大列表中。我必须能够保持与原始数据集的顺序和逻辑分离。 (请记住,原始数据集是 3 行 3 个 ID)。
如果找不到匹配项,我还需要抛出错误。您可以在上面的代码中看到我的尝试,但它不能正常工作。我尝试在我的第一个 if 语句之后添加这个:
elif all(ele not in valm[15):
check = False
但我收到此错误:"TypeError: argument of type 'int' is not iterable"
【问题讨论】:
-
为什么不使用字典来匹配用户名和ID?
标签: python list multidimensional-array enumeration