#python #list #dictionary
#python #Список #словарь
Вопрос:
Я создал словарь:
new_list = {}
что дает,
{'date': '13/09/2020', 'day': '13', 'month': '9', 'year': '2020', 'cases': '35', 'deaths': '0',
'countriesAndTerritories': 'Afghanistan', 'countryTerritoryId': 'AF', 'countryTerritoryCode': 'AFG',
'population2019': '38041757', 'continent': 'Asia', 'cumulativeper1000002Weeks': '1.3090878'}
{'date': '12/9/20', 'day': '12', 'month': '9', 'year': '2020', 'cases': '34', 'deaths': '0',
'countriesAndTerritories': 'Afghanistan', 'countryTerritoryId': 'AF', 'countryTerritoryCode': 'AFG',
'population2019': '38041757', 'continent': 'Asia', 'cumulativeper1000002Weeks': '1.22496971'}
{'date': '11/9/20', 'day': '11', 'month': '9', 'year': '2020', 'cases': '28', 'deaths': '0',
'countriesAndTerritories': 'Afghanistan', 'countryTerritoryId': 'AF', 'countryTerritoryCode': 'AFG',
'population2019': '38041757', 'continent': 'Asia', 'cumulativeper1000002Weeks': '1.16450983'}
Но теперь я хочу добавить этот словарь в список
dataset= [new_list]
что дает,
[{'date': '13/09/2020', 'day': '13', 'month': '9', 'year': '2020', 'cases': '35', 'deaths': '0', 'countriesAndTerritories': 'Afghanistan', 'countryTerritoryId': 'AF', 'countryTerritoryCode': 'AFG', 'population2019': '38041757', 'continent': 'Asia', 'cumulativeper1000002Weeks': '1.3090878'}]
[{'date': '12/9/20', 'day': '12', 'month': '9', 'year': '2020', 'cases': '34', 'deaths': '0', 'countriesAndTerritories': 'Afghanistan', 'countryTerritoryId': 'AF', 'countryTerritoryCode': 'AFG', 'population2019': '38041757', 'continent': 'Asia', 'cumulativeper1000002Weeks': '1.22496971'}]
[{'date': '11/9/20', 'day': '11', 'month': '9', 'year': '2020', 'cases': '28', 'deaths': '0', 'countriesAndTerritories': 'Afghanistan', 'countryTerritoryId': 'AF', 'countryTerritoryCode': 'AFG', 'population2019': '38041757', 'continent': 'Asia', 'cumulativeper1000002Weeks': '1.16450983'}]
Однако я пытаюсь получить результат как (так что только «[]» в начале и в конце), потому что тогда я могу сделать dataset [0: 2] (в противном случае это даст мне объект ‘Nonetype’, не подлежащий подписке), и он даст только первые два словаря
[{'date': '13/09/2020', 'day': '13', 'month': '9', 'year': '2020', 'cases': '35', 'deaths': '0', 'countriesAndTerritories': 'Afghanistan', 'countryTerritoryId': 'AF', 'countryTerritoryCode': 'AFG', 'population2019': '38041757', 'continent': 'Asia', 'cumulativeper1000002Weeks': '1.3090878'},
{'date': '12/9/20', 'day': '12', 'month': '9', 'year': '2020', 'cases': '34', 'deaths': '0', 'countriesAndTerritories': 'Afghanistan', 'countryTerritoryId': 'AF', 'countryTerritoryCode': 'AFG', 'population2019': '38041757', 'continent': 'Asia', 'cumulativeper1000002Weeks': '1.22496971'},
{'date': '11/9/20', 'day': '11', 'month': '9', 'year': '2020', 'cases': '28', 'deaths': '0', 'countriesAndTerritories': 'Afghanistan', 'countryTerritoryId': 'AF', 'countryTerritoryCode': 'AFG', 'population2019': '38041757', 'continent': 'Asia', 'cumulativeper1000002Weeks': '1.16450983'}]
Мой код выглядит следующим образом:
import csv
def read_dataset() -> List[Dict[str,str]]:
dataset = []
with open('covid-19.csv', 'r') as file:
reader = csv.reader(file)
no_head = next(reader, None)
for row in reader:
lst = [
'date',
'day',
'month',
'year',
'cases',
'deaths',
'countriesAndTerritories',
'countryTerritoryId',
'countryTerritoryCode',
'population2019',
'continent',
'cumulativeper1000002Weeks',
]
new_list = {}
for x in range(len(lst)):
new_list[lst[x]] = row[x]
dataset= [new_list]
#print(dataset)
dataset = read_dataset()
print(dataset[0:2])
Комментарии:
1. Точно так же, как вы бы поместили несколько словарей в список.
Ответ №1:
import csv
def read_dataset() -> List[Dict[str,str]]:
dataset = []
with open('covid-19.csv', 'r') as file:
reader = csv.reader(file)
no_head = next(reader, None)
for row in reader:
lst = [
'date',
'day',
'month',
'year',
'cases',
'deaths',
'countriesAndTerritories',
'countryTerritoryId',
'countryTerritoryCode',
'population2019',
'continent',
'cumulativeper1000002Weeks',
]
new_list = {}
for x in range(len(lst)):
new_list[lst[x]] = row[x]
dataset.append(new_list)
#print(dataset)
return dataset
dataset = read_dataset()
print(dataset[0:2])
Разница в том, что вы должны использовать:
dataset.append(new_list)
функция, которая добавляет в конце new_list (что является dict, немного сбивает с толку, обратите внимание на имена переменных!)
Комментарии:
1. Я знаю, я повторно использовал код @Bows, чтобы сделать его более понятным для него.
2. Было бы неплохо исправить именование и объяснить, почему вы это сделали в ответе.
3. Вы можете использовать
dict()
withzip()
для заменыfor
цикла:dict(zip(lst, row[:len(lst)]))
4. Да, именование было моим недостатком, следовало уделить больше внимания. Новый список работает, однако print(dataset[0:2]) выдает ошибку типа: объект ‘NoneType’ не подлежит подписке, и я не уверен, как это исправить. Редактировать: я должен был использовать return, спасибо за ответы
5. Вы пропускаете оператор return, я добавляю его в ответ!