【问题标题】:Python - type conversion loop through dictionaryPython - 通过字典进行类型转换循环
【发布时间】:2019-03-28 14:03:58
【问题描述】:

我有一个充满数字字符串的字典,我想将这些值中的每一个都转换为二进制。这是我尝试过的:

    for k,v in ValueDict.items():
        ValueDict.update(k:bin(v))

但是这不起作用。 PyCharm 说“变量注释的非法目标”,我不明白这是什么意思。据我所知,变量注释是一种“评论”变量类型的方式,但我不明白这与我的问题有什么关系......

提前致谢!

【问题讨论】:

    标签: python python-3.x loops dictionary


    【解决方案1】:

    尝试使用字典理解:

    print({k:bin(v) for k,v in ValueDict.items()})
    

    或者如果版本低于 2.5:

    print(dict((k:bin(v) for k,v in ValueDict.items())))
    

    您的代码在ValueDict.update(k:bin(v)) 中的: 中不起作用

    使用你的风格:

    for k,v in ValueDict.items():
        ValueDict.update({k:bin(v)})
    

    或者:

    for k,v in ValueDict.items():
        ValueDict[k]=bin(v)
    

    【讨论】:

    • 哦,我不知道我只想更改一个条目时必须使用花括号,谢谢!
    【解决方案2】:

    请参阅dict.update 的文档:

    使用其他键/值对更新字典,覆盖现有键。返回

    update() 接受 另一个字典 对象或 键/值对的可迭代对象(作为元组或其他长度为 2 的可迭代对象) .如果指定了关键字参数,则使用这些键/值对更新字典:d.update(red=1, blue=2)

    例子:

    # dict expression
    d = {"a":1, "b":2, "c":3}
    >>> {'a': 1, 'c': 3, 'b': 2}
    
    # multiple updates: no loop needed
    d.update( {"a" : 11, "b" : 22} )
    >>> {'a': 11, 'c': 3, 'b': 22}
    
    # multiple adds: no loop needed (also no '' around keys)
    d.update( A = 111, B = 22 )
    >>> {'a': 11, 'A': 111, 'c': 3, 'b': 22, 'B': 22}
    
    # updating all keys using loop
    for k,v in d.items():
        d[k]=v*2
    >>> {'a': 22, 'A': 222, 'c': 6, 'b': 44, 'B': 44}
        
    
    # add values to a list if same keys and not yet in
    # providing an existing key here would overwrite that one
    new_ones = ( ("X",42), ("X",4711) )
    for k,v in new_ones:
        entry = d.setdefault(k,[])
        entry.append(v)
    >>> {'a': 22, 'A': 222, 'c': 6, 'b': 44, 'B': 44, 'X': [42, 4711]}
    
    # no loop - update from iterable of key/value pairs
    new_ones = ( ("i",42), ("j",4711) )
    d.update(new_ones)
    >>> {'a': 22, 'A': 222, 'c': 6, 'b': 44, 'i': 42, 'j': 4711, 'B': 44, 'X': [42, 4711]}
    

    【讨论】:

      【解决方案3】:

      您需要提供一个dictupdate 的方法。

      for k,v in ValueDict.items():
          ValueDict.update({k:bin(v)})
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-08-11
        • 1970-01-01
        • 2020-07-28
        • 1970-01-01
        • 1970-01-01
        • 2014-11-22
        相关资源
        最近更新 更多