【问题标题】:Create a dictionary from an extrange list in Python从 Python 中的额外列表创建字典
【发布时间】:2019-09-05 18:24:14
【问题描述】:

所以我在Python (3.7) 中有这个输入:

params_list = ['SN:783HJ_DN', ' release tag:v2.2.4', ' build Feb  5 2019 16:13:34\n']

如果我查询的话,我需要一本字典

params_list['SN'], I got '783HJ_DN'

与其他相同(但在构建参数中没有':')。即使我尝试了这个并且我认为我是解决方案:

list_dict = dict(item.split(":") for item in params_list.split(","))

相反,我得到了这个输出错误:

回溯(最近一次调用最后):文件“/home/alvaro/parse.py”,第 9 行,在 param_dict = dict(item.split(":") for item in params.split(",") ) ValueError: 字典更新序列元素#0 的长度为 5; 2 是必需的

【问题讨论】:

  • 如果所有的键后跟一个冒号,这将很简单。但是由于“build”后面是一个空格,因此可能无法编写一个完全明确的解决方案。没有一条规则可以描述如何提取所有密钥。 “第一个冒号前的所有字符”表示“build Feb 5 2019 16”成为键; “第一个空格或冒号之前的所有字符”意味着“释放”成为键而不是“释放标记”。
  • 请注意,您不能命名列表,因为它是保留的。
  • *不应该,你可以随意命名一个变量,但是你会覆盖原来的功能。
  • @zabop,是的,只是为了更容易理解改了真名编辑:更新列表名称
  • 我还要注意:你为什么要调用 params_list.split(",")? params_list 不是逗号分隔的字符串,对吧?每个键值对似乎已经相互分离了。

标签: python list dictionary


【解决方案1】:

如果您希望列表的字符串项中只有一个 ':',请尝试此操作:

list1 = {i.split(":")[0] : i.split(":")[1] for i in params_list if i.count(":") ==1}

【讨论】:

    猜你喜欢
    • 2017-05-05
    • 2013-10-26
    • 2020-11-17
    • 2018-04-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-11
    • 1970-01-01
    相关资源
    最近更新 更多