关于python字典的一键多值问题

前言:

    今天在做ip池创建的时候,总是无法从列表正常转字典,用了 zip和dict函数,各种尝试都宣告失败。因为url地址的前缀 http或https导致了字典健值重复问题(一键多值),故而结果就只是大量的ip数据从列表(或者从元组转也一样)转到字典格式以后,往往就只剩下两个元素项:字典的健分别为http和https,对应的值是最后一个数据(最后的转换或者赋值操作语句)

    问题最后还是解决了,原因自己也找了出来。

    归根结底,是自己经验不足导致的


    如果你也遇到了类似的一键多值问题,认真看完这篇文章并加以思考,相信会有所收获的

my_list = [('http', '1.2.3.4'), ('https', '4.5.6.7'), ('http', '7.8.9.4'), ('https', '1.1.0.0')]
    my_dict = {}
    for i in range(len(my_list)):
        if my_list[i][0] in my_dict.keys():
            print('1')
            my_dict[my_list[i][0]].append(my_list[i][1])
        else:
            print('2')
            my_dict[my_list[i][0]] = list()
            my_dict[my_list[i][0]].append(my_list[i][1])
    print('my_dict = ', my_dict)

正确的代码如上,测试的结果如下:

在这里插入图片描述

    接下来是两次不同的错误版本:
    错误的原因是下列版本会导致第一个字典元素的值被拆分成多个值
这是由list强转的特性决定的

my_list = [('http', '1.2.3.4'), ('https', '4.5.6.7'), ('http', '7.8.9.4'), ('https', '1.1.0.0')]
    my_dict = {}
    for i in range(len(my_list)):
        if my_list[i][0] in my_dict.keys():
            print('1')
            my_dict[my_list[i][0]].append(my_list[i][1])  # 这是改进前的句子,与下边被注释的是一对
        else:
            print('2')
            my_dict[my_list[i][0]] = list(my_list[i][1])  # 直接转可能会在第一个元素产生意外(不是自己想要的字典结果)
    print('my_dict = ', my_dict)
出错版本(1)

my_list = [('http', '1.2.3.4'), ('https', '4.5.6.7'), ('http', '7.8.9.4'), ('https', '1.1.0.0')]
    my_dict = {}
    for i in range(len(my_list)):
        if my_list[i][0] in my_dict.keys():
            print('1')
            my_dict[my_list[i][0]] = list(my_list[i][1])  # 如此改进还是存在同样的问题
        else:
            print('2')
            my_dict[my_list[i][0]] = my_list[i][1]  # 故决定存在一值多建时,再把值转为列表
    print('my_dict = ', my_dict)
出错版本(2)


问题的解决总结如下:

    字典一键多值需要依靠列表作为值的存储形式
    而为了避免出错,往往建议先置空列表再使用append函数在相应元素处末尾添加新的值。



                                                                                                                        2019/11/10 02:15

    dict.setdefault(key,[])


    dict[key].append(values)

values = list[v1,v2,v3,…,vn]


18:50

发布了89 篇原创文章 · 获赞 159 · 访问量 5万+

猜你喜欢

转载自blog.csdn.net/I_love_you_dandan/article/details/102993928
今日推荐