【问题标题】:Python List into a Dict?Python 列表变成字典?
【发布时间】:2017-05-09 03:45:40
【问题描述】:

我有一个程序,每行读取两个(或三个)空格分隔的标记、2 个字符串和一个可选的数字

我的程序:

import sys
d = sys.stdin.readlines()
d = [i.split() for i in d]
print(*d)

运行程序:

python3 program12.py
Austin Houston 300
SanFrancisco     Albany         1000
NewYorkCity    SanDiego
['Austin', 'Houston', '300'] ['SanFrancisco', 'Albany', '1000'] ['NewYorkCity', 'SanDiego']

但是现在我需要将这些项目添加到一个字典中,这是我感到困惑的地方: 对于示例输入,dict 需要如下所示:

{'Austin': {'Houston': 300}, 'SanFrancisco':  {'Albany': 1000}, 'NewYorkCity': { 'SanDiego': True }}

我仍然对字典的工作方式感到困惑,更不用说用看起来像嵌套字典的东西来填充字典了。任何帮助表示赞赏!

【问题讨论】:

    标签: python dictionary input


    【解决方案1】:

    更新

    一行更好的解决方案。

    d = {e[0] : {e[1] : e[2] if len(e) == 3 else True} for e in d}


    更新

    我忽略了你最后一个元素的长度只有两个,所以如果你可以像[['Austin', 'Houston', '300'],['SanFrancisco', 'Albany', '1000'],['NewYorkCity', 'SanDiego', True]] 这样构建列表,那么下面的解决方案可以工作。


    一条线解决方案。

    d = {e[0] : {e[1] : e[2]} for e in d}

    【讨论】:

    • 哇,我不敢相信它这么容易!当没有数字时,如何构建我的列表以添加 True?
    • @Coder117 新的更好的解决方案:d = {e[0] : {e[1] : e[2] if len(e) == 3 else True} for e in d}
    • 太棒了!祝福你的灵魂。
    【解决方案2】:
    d = { e[0]: {e[1]: (e[2] if e[2:] else True)} for e in d}
    

    在最后添加这一行。

    【讨论】:

      猜你喜欢
      • 2020-01-02
      • 2017-12-05
      • 1970-01-01
      • 1970-01-01
      • 2018-02-06
      • 2016-01-03
      • 2022-11-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多