推荐学习书目
› Learn Python the Hard Way
Python Sites
› PyPI - Python Package Index
› http://diveintopython.org/toc/index.html
› Pocoo
值得关注的项目
› PyPy
› Celery
› Jinja2
› Read the Docs
› gevent
› pyenv
› virtualenv
› Stackless Python
› Beautiful Soup
› 结巴中文分词
› Green Unicorn
› Sentry
› Shovel
› Pyflakes
› pytest
Python 编程
› pep8 Checker
Styles
› PEP 8
› Google Python Style Guide
› Code Style from The Hitchhiker's Guide
awker
V2EX  ›  Python

Python dict 组合操作问题

  •  
  •   awker · Nov 27, 2017 · 3182 views
    This topic created in 3268 days ago, the information mentioned may be changed or developed.
    有一个列表和一个字典
    port = [80, 443]
    value_port = {'TX_80': 0, 'RX_443': 0, 'RX_80': 0, 'TX_443': 0}

    如何得出下面的结果?
    port_80 = {'TX_80': 0, 'RX_80': 0}
    port_443 = {'RX_443': 0, 'TX_443': 0}
    18 replies  •  2017-11-28 02:26:36 +08:00
    scriptB0y
    scriptB0y
    Nov 27, 2017❤️1
    1
    result = defaultdict(list)
    for k,v in value_port.items():
    result[re.search(r"_(\d{1,5})").group(1)].append({k:v})

    随手写的,我觉得差不多
    est
    est
    Nov 27, 2017❤️1
    2
    Python 多个列表如何合并成一个大列表?

    /t/409304


    LZ 还是要多练习基础哦。
    Thanks
    Thanks
    Nov 27, 2017❤️1
    3
    可以根据字符串包含判断
    1. 将 port 转成字符串,然后判断是否被包含在某个键中;
    2. 或者将键根据下划线拆分,然后判断第二个位置的字符串是不是等于 port 元素的字符串形式。
    另外,如果需要动态创建 'port_80' 这种变量的话,可以看一下 locals() 函数。
    awker
    awker
    OP
    Nov 27, 2017
    4
    @scriptB0y defaultdicts 是什么?
    awker
    awker
    OP
    Nov 27, 2017
    5
    @est 共同学习
    cbiqih
    cbiqih
    Nov 27, 2017❤️1
    6
    port_80, port_443 = tuple(list(filter(lambda x: x.endswith(str(i)), value_port)) for i in port)
    awker
    awker
    OP
    Nov 27, 2017
    7
    @cbiqih 厉害 膜拜大佬 我在看看怎么动态创建 'port_80' 这种变量
    cbiqih
    cbiqih
    Nov 27, 2017❤️1
    8
    貌似并非是你要的结果,你要生成的是字典,上面生成的是列表哇~
    Trim21
    Trim21
    Nov 27, 2017❤️1
    9
    @awker #4 from collections import defaultdict
    awker
    awker
    OP
    Nov 27, 2017
    10
    @cbiqih 没事 有思路就行
    jxie0755
    jxie0755
    Nov 28, 2017❤️1
    11
    哥,怎么又是你~~~由于我也是新手,最近才学了几个月 python,所以权当自己练习了哈~~
    先感谢你的'感谢'

    # 动态生成你要的变量名
    port = [80, 443]
    new_port = []
    for i in port:
    new_port.append('port_' + str(i))
    print(new_port)

    for i in range(len(new_port)):
    vars()[new_port[i]] = temp[i]
    print(port_80)
    print(port_443)

    # 简写可以变成
    port = [80, 443]
    new_port = ['port_' + str(i) for i in port]

    # 最终结果
    port = [80, 443]
    value_port = {'TX_80': 0, 'RX_443': 0, 'RX_80': 0, 'TX_443': 0}
    new_port = ['port_' + str(i) for i in port]

    temp = []
    for i in port:
    new_dict = {}
    for keys, values in value_port.items():
    if str(i) in keys:
    new_dict[keys] = values
    temp.append(new_dict)

    for i in range(len(new_port)):
    vars()[new_port[i]] = temp[i]


    我只能帮你到这里了,这个把 string 变成变量名的方法我还真不会,stackoverlfow 上面都没有,是临时 google 找出来的.
    我看 stackoverflow 上面大多数人是反对这么做的, 觉得这么做很吃力不讨好的感觉? 我是新手也不太懂
    jxie0755
    jxie0755
    Nov 28, 2017❤️1
    12
    补一下,不知道为什么缩进没了...

    port = [80, 443]
    value_port = {'TX_80': 0, 'RX_443': 0, 'RX_80': 0, 'TX_443': 0}
    new_port = ['port_' + str(i) for i in port]

    temp = []
    for i in port:
    new_dict = {}
    for keys, values in value_port.items():
    if str(i) in keys:
    new_dict[keys] = values
    temp.append(new_dict)

    for i in range(len(new_port)):
    vars()[new_port[i]] = temp[i]
    jxie0755
    jxie0755
    Nov 28, 2017❤️1
    13
    擦,不管怎么整,缩进都被吞没, 用等号代替

    port = [80, 443]
    value_port = {'TX_80': 0, 'RX_443': 0, 'RX_80': 0, 'TX_443': 0}
    new_port = ['port_' + str(i) for i in port]

    temp = []
    for i in port:
    ==new_dict = {}
    ==for keys, values in value_port.items():
    ====if str(i) in keys:
    ======new_dict[keys] = values
    ==temp.append(new_dict)

    for i in range(len(new_port)):
    ==vars()[new_port[i]] = temp[i]

    print(port_80)
    print(port_443)
    awker
    awker
    OP
    Nov 28, 2017
    14
    @jxie0755 兄弟 你这新手任务可以啊 我自愧不如啊
    awker
    awker
    OP
    Nov 28, 2017
    15
    @jxie0755 上条去掉“任务”
    jxie0755
    jxie0755
    Nov 28, 2017❤️1
    16
    @awker 都是瞎弄~~~高手都是一行代码完成任务的...
    jxie0755
    jxie0755
    Nov 28, 2017❤️1
    17
    @awker 不过这些真的不是很难,你是不是应该找本基础点的教材过一道啊,其实也不花很多时间,几个星期就行了.
    awker
    awker
    OP
    Nov 28, 2017 via iPhone
    18
    @jxie0755 带着问题学习 效率高点
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   4151 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 46ms · UTC 01:56 · PVG 09:56 · LAX 17:56 · JFK 20:56
    ♥ Do have faith in what you're doing.