将循环元素替换为循环中的字典键

时间:2017-02-22 04:30:25

标签: python dictionary

我正在研究一个将整数转换为十六进制的函数。两个人的赞美和处理否定有很多工作要做,但现在我正在努力让核心逻辑发挥作用。这就是我所拥有的:

def intToHexaBin(num):
    num = abs(num)
    symdict={10:"A",11:"B",12:"C",13:"D",14:"E",15:"F"}
    rlist=[]
    while(num!=0):
        rlist.append(str(num%16))
        num//=16
    rlist=rlist[::-1]
    for i in rlist:
        if int(i) in symdict:
            print("Not sure how to swap list element for a dict value")

    print(''.join(rlist))


intToHexaBin(4512)

我希望此示例的输出看起来像这样:

11A0

我正在尝试使用循环来遍历rlist并检查rlist中的元素是否与symdict中的某个键匹配。如果是的话,我想将list元素交换为匹配的字典值。因此,如果在列表中找到10,则会在字典中找到它,并且列表中的元素将更改为"A"匹配的dict值。我不知道从哪里开始

1 个答案:

答案 0 :(得分:1)

您可以使用enumerate来迭代(index, value)个元组。对于每个值,您可以使用dict.getsymdict获取值或使用作为第二个参数传递的默认值。然后只需将get返回的内容分配给rlist中的索引:

def intToHexaBin(num):
    num = abs(num)
    symdict={10:"A",11:"B",12:"C",13:"D",14:"E",15:"F"}
    rlist=[]
    while(num!=0):
        rlist.append(num%16)
        num//=16
    rlist=rlist[::-1]
    print(rlist)
    for idx, val in enumerate(rlist):
        rlist[idx] = symdict.get(val, str(val))

    print(''.join(rlist))

请注意,我已将rlist更改为包含整数而不是字符串,因为symdict中的键也是整数。

如果您只想将int转换为十六进制表示,则可以使用hex内置:

>>> hex(4512)
'0x11a0'