Я пытался получить словарь с кортежем строк, ключом целого числа из файла CSV, но у меня возникли проблемы.
Это код, который я пробовал:
fullcsv = [['Brand', 'Swap', 'Candy1', 'Candy2', 'Capacity'],
['Willywonker', 'Yes', 'bubblegum', 'mints', '7'],
['Mars-CO', 'Yes', 'chocolate', 'bubblegum', '1'],
['Nestle', 'Yes', 'bears', 'bubblegum', '2'],
['Uncle Jims', 'Yes', 'chocolate', 'bears', '5']]
def findE(fullcsv):
i = 0
a = {}
while i < len(fullcsv)-1:
i = i + 1
a[i] = ({(fullcsv[i][2],fullcsv[i][3]): int(fullcsv[i][4])})
return a
Это вывод для этого фрагмента кода:
{1: {('bubblegum', 'mints'): 7},
2: {('chocolate', 'bubblegum'): 1},
3: {('bears', 'bubblegum'): 2},
4: {('chocolate', 'bears'): 5}}
Но результат, который я ищу, больше похож на этот:
{('bubblegum', 'mints'): 7,
('chocolate', 'bubblegum'): 1,
('bears', 'bubblegum'): 2,
('chocolate', 'bears'): 5}
чтобы кортежи не нумеровались и тоже не в своих {}
, а просто в скобках ()
.
Если вы можете попробовать, измените эту строку a[i] = ({(fullcsv[i][2],fullcsv[i][3]): int(fullcsv[i][4])})
на a[(fullcsv[i][2],fullcsv[i][3])]=int(fullcsv[i][4]
в своем коде.
внутри функции вам нужно установить пару значений ключа словаря следующим образом
a[(fullcsv[i][2],fullcsv[i][3])] = int(fullcsv[i][4])
так что полная функция
def findE(fullcsv):
i = 0
a = {}
while i < len(fullcsv)-1:
i = i + 1
a[(fullcsv[i][2],fullcsv[i][3])] = int(fullcsv[i][4])
return a
общий синтаксис
dictionary[new_key] = new_value
Вот немного другой способ, если хотите.
def findE(fullcsv):
new_dict = {}
for entry in fullcsv[1:]:
new_dict[(entry[2],entry[3])] = entry[-1]
return new_dict
Ницца. Вы можете сократить это до: return {(e[2], e[3]): int(e[-1]) for e in fullcsv[1:]}
.
Легче перебирать csv с помощью
for row in fullcsv:[1:]
, а не с помощью индексаi
. Код будет выглядеть менее сложным.