【问题标题】:list comprehension to dictionary is creating an empty dictionary对字典的列表理解正在创建一个空字典
【发布时间】:2019-07-31 12:10:55
【问题描述】:

我正在使用列表推导来创建字典。 Iterable 是在两个单独的列表上使用 zip 函数创建的。如果使用 print 函数检查这个 zip 对象的列表,然后创建字典,它会生成一个空字典。而如果未打印此 zip 元素的列表,则会按预期创建字典。 请解释为什么会这样。

drinks = ["espresso", "chai", "decaf", "drip"]
caffeine = [64, 40, 0, 120]
zipped_drinks = zip(drinks, caffeine)
print(list(zipped_drinks))
drinks_to_caffeine = {key:value for key,value in zipped_drinks}
print(drinks_to_caffeine)

这会产生:- [('espresso', 64), ('chai', 40), ('decaf', 0), ('drip', 120)] {}

如果“print(list(zipped_drinks))”被删除,输出是:- {'espresso': 64, 'chai': 40, 'decaf': 0, 'drip': 120}

【问题讨论】:

  • 您应该知道包含list(zipped_drinks) 时会发生这种情况。它不仅用于打印,而且 dict 本身也发生了变化。 (并且将只保留键)

标签: python-3.x list dictionary zip


【解决方案1】:

这是因为您已通过调用 list 消耗了 zip 对象,现在它是空的。请参阅this SO question 和最佳答案。基本上zip 在 Python 3 中返回一个迭代器。

如您所见,您需要删除list 调用或再次调用zip

drinks = ["espresso", "chai", "decaf", "drip"]
caffeine = [64, 40, 0, 120]
zipped_drinks = zip(drinks, caffeine)
print(list(zipped_drinks))
zipped_drinks = zip(drinks, caffeine)
drinks_to_caffeine = {key:value for key,value in zipped_drinks}
print(drinks_to_caffeine) 

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-01-16
    • 2018-09-18
    • 2016-06-09
    • 1970-01-01
    • 2018-08-04
    • 2020-08-31
    • 2021-10-17
    • 1970-01-01
    相关资源
    最近更新 更多