Какой Pythoni c самый эффективный и эффективный способ обработки списка словарей и избежания побочных эффектов (каковы побочные эффекты)?
Точнее: почему следующий код создает объект-генератор, в то время как любой другой аналогичный код дает желаемый результат?
print(sum(dictionary[site] for site in dictionary) for dictionary in listofdictionaries)
Некоторый фон
Я начал возиться с **kwargs
и создал то, что я считаю довольно ужасным кодом.
def testing(**kwargs):
mysum = 0
for kw in kwargs:
mysum += kwargs[kw]
print(mysum)
listofdictionaries = [{"site1": 1, "room1": 2, "day1": 3}, {"site2": 4, "room2": 5, "day2": 6}]
for dictionary in listofdictionaries:
testing(**dictionary)
Я просмотрел Документ о структурах данных , включая понимание списка, и нашел лучший способ добиться того же результата:
listofdictionaries = [{"site1": 1, "room1": 2, "day1": 3}, {"site2": 4, "room2": 5, "day2": 6}]
for dictionary in listofdictionaries:
mysum = 0
for value in dictionary:
mysum += dictionary[value]
print(mysum)
А потом немного поумнел и немного сократил его:
for dictionary in listofdictionaries:
print(sum(dictionary[value] for value in dictionary))
Мне действительно неинтересно делать это однострочным ради того, чтобы сделать его однострочным, но после прочтения бесчисленных сообщений с пониманием списка на Stack Overflow, в которых говорится об избежании «побочных эффектов», я чувствую, что может быть дополнительный шаг для этого. Возможно, я не понимаю, что такое побочные эффекты.
В любом случае, каждый из них должен приводить к выводу:
6
15