【问题标题】:Key compare using dictionary使用字典进行键比较
【发布时间】:2010-12-07 12:34:39
【问题描述】:

我有一个结构如下的文件:

system.action.webMessage=Web 访问期间发生错误。 system.action.okMes​​sage=一切正常。 core.alert.inform=错误号 5512。

我需要一个脚本来比较具有此结构的 2 个文件中的键。我正在编写一个脚本来将文件转换为字典,并使用字典结构来比较两个文件中的 de 键('=' 之前的字符串),并告诉我哪个键相等。

file = open('system.keys','r')
lines = []
for i in file:
    lines.append(i.split('='))

dic = {}
for k, v in lines:
    dic[k] = v

但我收到以下错误:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: too many values to unpack

任何人有一些线索或帮助? :( 我尝试了很多我在 google 中找到的东西,但没有解决方案。

【问题讨论】:

    标签: python file list dictionary compare


    【解决方案1】:

    如果一行中有多个“=”,您将获得一个包含两个以上项目的列表,而您的 for 循环 (for k, v in items) 预计每个列表将只有两个项目。

    尝试使用i.split('=', 1)

    例如:

    >>> "a=b=c".split('=')
    ['a', 'b', 'c']
    >>> "a=b=c".split('=', 1)
    ['a', 'b=c']
    

    【讨论】:

    • 当它尝试将列表转换为字典时,我只在第二个“for”中收到此错误。两个文件的每一行都只有一个“=”。
    • @Leonardo,那是因为lines 中有超过 2 个元素的项目
    【解决方案2】:
    file = open('system.keys','r')
    lines = []
    for i in file:
        lines.append(i.partition('='))
    
    dic = {}
    for k,_,v in lines:
        dic[k] = v
    

    或使用拆分

    myfile = open('system.keys','r')
    dic = dict(i.split("=",1) for i in myfile)
    

    因为dict() 知道如何根据(key,value) 对的序列制作字典

    【讨论】:

      猜你喜欢
      • 2018-10-05
      • 2017-06-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-05-17
      • 1970-01-01
      • 1970-01-01
      • 2019-06-23
      相关资源
      最近更新 更多