在不同列表的相同位置检测项目

问题描述 投票:0回答:1

我有一个csv文件,其中包含多行,每行中有多个条目。我知道如何将csv的每一行转换为列表。

例如,从到

  1,x,2                       [1,x,2]
  3,x,4                       [3,x,4]
  5,y,6                       [5,y,6]
  7,y,8                       [7,y,8]

但是我不知道如何处理每个列表,找不到位于相同位置但在不同列表中的项目。我希望能够检测到“ x”和“ y”(以及后续列表中相同位置的任何其他项目)。

此外,一旦我能够检测并区分x,y等,然后我想整理和分析另一组匹配列表。

例如

[1,x,2][3,x,4]

整理2和4,因为它们的列表带有x。

[5,y,6][7,y,8]

整理6和8,因为它们的列表为y。

python list python-3.7
1个回答
0
投票

构建所有共享某个属性的项目的简单方法是将它们放在以该属性为键的字典中。

from collections import defaultdict
from typing import List, Dict, Tuple, Union

Entry = Union[int, str]
csv: List[List[Entry]] = [
    [1,'x',2],
    [3,'x',4],
    [5,'y',6],
    [7,'y',8]
]

index: Dict[Tuple[int, Entry], List[List[Entry]]] = defaultdict(list)

for row in csv:
    for i in range(len(row)):
        # Key on a tuple of i and the entry, e.g. (1, 'x') 
        index[(i, row[i])].append(row)

for key in index:
    if len(index[key]) > 1:
        print("index %d contains entry %s in multiple lists:" % key)
        print(index[key])

产生以下输出:

index 1 contains entry x in multiple lists:
[[1, 'x', 2], [3, 'x', 4]]
index 1 contains entry y in multiple lists:
[[5, 'y', 6], [7, 'y', 8]]
© www.soinside.com 2019 - 2024. All rights reserved.