Как преобразовать список так, чтобы он содержал уникальные имена с разными значениями? - PullRequest
0 голосов
/ 03 августа 2020
votess = [['Y AFGHANISTAN','Y INDIA','Y NEPAL','N UNITED STATES'], ['Y AFGHANISTAN','N INDIA','Y NEPAL','      MALI','Y UNITED STATES'], ['N AFGHANISTAN','Y INDIA','Y NEPAL', '      MONGOLIA',' N UNITED STATES']]

ожидаемый результат,

1

Я пробовал этот способ, но он не работает

lis = []
for votes in votess:
    row_to_be_appended = ()
    for vote in votes:
        row_to_be_appended[vote[2:]] = vote[0]
        lis.append(row_to_be_appended)

Ответы [ 3 ]

1 голос
/ 03 августа 2020
votess = [['Y AFGHANISTAN','Y INDIA','Y NEPAL','N UNITED STATES'], ['Y AFGHANISTAN','N INDIA','Y NEPAL','      MALI','Y UNITED STATES'], ['N AFGHANISTAN','Y INDIA','Y NEPAL', '      MONGOLIA',' N UNITED STATES']]


lis = []
for votes in votess:
    row_to_be_appended = {}
    for vote in votes:
        row_to_be_appended[vote[2:]] = vote[0]
    lis.append(row_to_be_appended)
print(lis)
0 голосов
/ 03 августа 2020

Вы также можете сделать это с помощью pandas.

Вот решение:

import pandas as pd
votes = [
    ["Y AFGHANISTAN", "Y INDIA", "Y NEPAL", "N UNITED STATES"],
    ["Y AFGHANISTAN", "N INDIA", "Y NEPAL", "      MALI", "Y UNITED STATES"],
    ["N AFGHANISTAN", "Y INDIA", "Y NEPAL", "      MONGOLIA", " N UNITED STATES"],
]
flatten_votes = [vote for vote_list in votes for vote in vote_list]
votes_df = (
    pd.Series(flatten_votes)
    .str.replace(r"^\s", "")
    .str.split(r"\s+", expand=True, n=1)
)
votes_df.columns = ["judge", "type"]
votes_df.loc[:, "appear_index"] = votes_df.groupby("type").cumcount()
result = votes_df.pivot(
    index="appear_index", columns="type", values="judge"
).fillna("")
print(result)

Результат:

type         AFGHANISTAN INDIA MALI MONGOLIA NEPAL UNITED STATES
appear_index                                                    
0                      Y     Y                   Y             N
1                      Y     N                   Y             Y
2                      N     Y                   Y             N
0 голосов
/ 03 августа 2020

Думаю, это решит вашу проблему:

from collections import defaultdict

votess = [['Y AFGHANISTAN',
           'Y INDIA',
           'Y NEPAL',
           'N UNITED STATES'],
          ['Y AFGHANISTAN',
           'N INDIA',
           'Y NEPAL',
           '      MALI',
           'Y UNITED STATES'],
          ['N AFGHANISTAN',
           'Y INDIA',
           'Y NEPAL',
           '      MONGOLIA',
           ' N UNITED STATES']]

v_dic = defaultdict()

for vote in votess:
    for v in vote:
        if v[2:] in v_dic:
            v_dic[v[2:]] = [v_dic[v[2:]], v[0]]
        else:
            v_dic[v[2:]] = v[0]

for v in v_dic.keys():
    print("{}->{}".format(v.strip(), v_dic[v]))

Вывод:

AFGHANISTAN->[['Y', 'Y'], 'N']
INDIA->[['Y', 'N'], 'Y']
NEPAL->[['Y', 'Y'], 'Y']
UNITED STATES->['N', 'Y']
MALI-> 
MONGOLIA-> 
UNITED STATES-> 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...