python словарь: могу ли я поставить список в качестве ключа в словаре? - PullRequest
0 голосов
/ 17 июня 2020
<ipython-input-3-e36ce72b5104> in <module>
 87     return s_u_df, s_i_df, p_i_df, s_t_df, p_t_df
 88 
---> 89 print(analyze_data())
 90 
 91 

<ipython-input-3-e36ce72b5104> in analyze_data()
 27     #unit_data분석
 28     for i in  unq_unit1_dt:
---> 29         a = unit_data['1st-unit'].count(i)
 30         unit1_d[str(i)] = a
 31         a = 0

~\Anaconda3\lib\site-packages\pandas\core\series.py in count(self, level)
   1718 
   1719         if isinstance(level, str):
-> 1720             level = self.index._get_level_number(level)
   1721 
   1722         lev = self.index.levels[level]

~\Anaconda3\lib\site-packages\pandas\core\indexes\base.py in _get_level_number(self, level)
   1418 
   1419     def _get_level_number(self, level):
-> 1420         self._validate_index_level(level)
   1421         return 0
   1422 

~\Anaconda3\lib\site-packages\pandas\core\indexes\base.py in _validate_index_level(self, level)
   1414         elif level != self.name:
   1415             raise KeyError(
-> 1416                 f"Requested level ({level}) does not match index name ({self.name})"
   1417             )
   1418 

KeyError: "Requested level (['TFT3_Fiora', 'TFT3_Caitlyn', 'TFT3_Leona', 'TFT3_Vi', 'TFT3_Vayne', 'TFT3_Irelia', 'TFT3_Riven', 'TFT3_Thresh', 'TFT3_Ekko', 'empty', 'empty', 'empty', 'empty']) does not match index name (None)"

Это моя ошибка

то, что я намеревался сделать, это то, что у меня есть список с несколькими дубликатами, и я хочу сопоставить 'list as key': 'number of duplicates' as value

сначала я получаю список без дубликатов и

с помощью 'for in range' я пробовал подсчитывать вещи без дубликатов в исходном списке

유닛 .csv файл состоит из 3 столбцы и в нем есть список

есть ли лучший способ сделать то, что я намеревался сделать?

вот мой код

    unq_unit1_dt = unit_data['1st-unit'].drop_duplicates()
unq_unit2_dt = unit_data['2nd-unit'].drop_duplicates()
unq_unit3_dt = unit_data['3rd-unit'].drop_duplicates()

#저장할 리스트
unit1_d= {};s_u1_d = {};u1_L = []
unit2_d = {};s_u2_d = {};u2_L = []
unit3_d = {};s_u3_d = {};u3_L = []
s_u_d = {};u4_L = []

#unit_data분석
for i in  unq_unit1_dt:
    a = unit_data['1st-unit'].count(i)
    unit1_d[str(i)] = a
    a = 0

for j in unq_unit2_dt:
    b = unit_data['2nd-unit'].count(j)
    unit2_d[j] = b
    b = 0

for h in  unq_unit3_dt:
    c = unit_data['3rd-unit'].count(h)
    unit3_d[h] = c
    c = 0

#데이터 정렬 후 값 추출
s_u1_d = sort_dict(unit1_d); u1_df = pd.DataFrame(s_u1_d); u1_df.to_csv("유닛1.csv", index=False,encoding = 'cp949')
s_u2_d = sort_dict(unit2_d); u2_df = pd.DataFrame(s_u2_d); u2_df.to_csv("유닛2.csv", index=False,encoding = 'cp949')
s_u3_d = sort_dict(unit3_d); u3_df = pd.DataFrame(s_u3_d); u3_df.to_csv("유닛3.csv", index=False,encoding = 'cp949')

for i in range(5):
    u1_L.append(list(s_u1_d.keys)[i])
    u2_L.append(list(s_u2_d.keys)[i])
    u3_L.append(list(s_u3_d.keys)[i])

1 Ответ

1 голос
/ 17 июня 2020

Мне трудно читать ваш код, но, как правило, согласно документации Python не каждое значение разрешено как ключ словаря Python. Разрешены только неизменяемые значения: значения, которые вы не можете изменить. Таким образом, работает любое число, работает строка, работает кортеж, работает объект (что-то, что является экземпляром класса, который вы создаете), но списки не работают, потому что вы можете их изменить. Вы можете никогда использовать список как ключ словаря. Но, опять же, кортеж вполне подойдет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...