Обнаружение предметов в одной позиции разных списков - PullRequest
0 голосов
/ 10 ноября 2019

У меня есть 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, так как их списки имеют х.

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

сопоставлять 6 и 8, так как их списки имеют y.

1 Ответ

0 голосов
/ 10 ноября 2019

Простой способ создать коллекцию всех элементов, которые имеют определенное свойство, состоит в том, чтобы поместить их в словарь, на котором указано это свойство.

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]]
...