1. Что именно делает column, value в row.items ()?
Чтобы ответить на этот вопрос, мы должны взглянуть на строку reader = csv.DictReader(open('values.csv'))
. A DictReader
возвращает строки CSV в качестве словаря, где ключи (по умолчанию) такие же, как первая строка в вашем файле CSV (например, имена столбцов). При итерации по читателю (for row in reader:
) row
является словарем. Чтобы получить пары ключ / значение из словаря, вы должны вызвать его метод .items()
, который возвращает итератор кортежей, содержащих ключ и значение соответственно. В вашем случае, если мы прочитаем вторую строку вашего образца CSV, строка будет идентична:
row = {
"Date": 123,
"Foo": 456,
"Bar": 789
}
Итак, в вашей первой итерации for column, value in row.items():
мы присваиваем значение "Date"
column
и от 123
до value
. Мы можем что-то сделать с этими значениями, и в следующей итерации для l oop (так что следующий кортеж, который создается row.items ()), значение "Foo"
присваивается column
и 456
на value
.
2. Кроме того, что делает result.setdefault (column, []). Append (value)?
Обратите внимание, что переменная result
- это пустой словарь. Этот словарь будет содержать списки значений, мы хотим, чтобы переменная result
выглядела следующим образом:
result = {
"Date": [123, "abc"],
"Foo": [456, "def"],
"Bar": [789, "ghi"]
}
В for-l oop, в котором мы находимся (цикл по row
словарь), теперь мы присваиваем значение 123
ключу "Date"
в словаре result
. Однако, если мы находимся на первой итерации, словарь result
все еще пуст! В основном здесь происходит следующее: result.setdefault(column, [])
-> this получает значение ключа column
(обратите внимание, это переменная из for-l oop!) Из словаря с именем result
, и если этот ключ не существует, создайте его с пустым списком и верните это значение (пустой список). В этом случае [] - пустой список. На первой итерации (где ключи / значения не хранятся в словаре result
) переменной column
присваивается «Дата», и, поскольку она еще не существует в словаре result
, она создается с помощью value [] (пустой список).
Затем в цепочке вы вызываете .append(value)
, который принимает значение (в первой итерации это 123
) и добавляет его в список.
3. Кроме того, как программа поняла, что первая строка - это та, в которой я хочу сохранить ключи?
Это уловка DictReader
, которая по умолчанию смотрит на вашу первую строку CSV и обрабатывает его как имена столбцов.