推荐学习书目
› 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
fenglala
V2EX  ›  Python

Python 新手语法问题,为什么用 str split 后新建 dict 爆黄呢?

  •  
  •   fenglala ·
    code4lala · Nov 16, 2022 · 5061 views
    This topic created in 1452 days ago, the information mentioned may be changed or developed.
    str_x = 'int_value=233/str_value=hello'
    dict_x = dict(element.split('=') for element in str_x.split('/'))
    print(dict_x)
    print(int(dict_x['int_value']))
    print(dict_x['str_value'])
    

    这段代码可以正常运行,但是为什么放到 pycharm 里爆黄呢,请问怎么改才能不爆黄呢?

    dict()里边爆黄:

    Unexpected type(s): (Generator[List[str], Any, None]) Possible type(s): (SupportsKeysAndGetItem[List[str], _VT]) (Iterable[Tuple[Any, Any]]) 
    
    18 replies  •  2022-11-17 11:53:26 +08:00
    aladdinding
    aladdinding
    Nov 16, 2022
    1
    dict_x = dict(tuple(element.split('=')) for element in str_x.split('/'))
    fenglala
    fenglala
    OP
    Nov 16, 2022
    2
    @aladdinding 还是爆黄,爆黄信息变了

    Unexpected type(s): (Generator[Tuple[str, ...], Any, None]) Possible type(s): (SupportsKeysAndGetItem[Tuple[str, ...], _VT]) (Iterable[Tuple[Any, Any]])
    westoy
    westoy
    Nov 16, 2022
    3
    dict(element.split('=', 1) for element in str_x.split('/'))


    不过不建议直接搞, 去看看 pyparsing 之类的
    aloxaf
    aloxaf
    Nov 16, 2022
    4
    element.split('=') 可能产生有长度超过 2 的 list ,理论上加上 maxsplit=1 就能满足要求,可惜 pycharm 还没有这么高级

    你只能选择这样干,嫌太长可以用海象运算符简化
    dict_x = dict((element.split('=')[0], element.split('=')[1]) for element in str_x.split('/'))

    当然我更建议
    # noinspection PyTypeChecker
    dict_x = dict(element.split('=') for element in str_x.split('/'))
    fenglala
    fenglala
    OP
    Nov 16, 2022
    5
    @westoy 也爆黄,提示信息变成:
    Unexpected type(s): (Generator[List[str], Any, None]) Possible type(s): (SupportsKeysAndGetItem[List[str], _VT]) (Iterable[Tuple[Any, Any]])
    fenglala
    fenglala
    OP
    Nov 16, 2022
    6
    @aloxaf 感谢!原来只要让 linter 认为这里确定有两个元素就可以了!
    fenglala
    fenglala
    OP
    Nov 16, 2022
    7
    @aloxaf 按照你的思路,这样写也不爆黄了,不用 split 两遍
    dict_x = dict((element.split('=')[0:2]) for element in str_x.split('/'))
    hellojay
    hellojay
    Nov 16, 2022
    8
    dict_x = {element.split('=')[0]: element.split('=')[1] for element in str_x.split('/')}
    fenglala
    fenglala
    OP
    Nov 16, 2022
    9
    啊不行,我大意了,是我前边有 noinspection PyTypeChecker 导致的,我 7 楼的回复还是爆黄
    fenglala
    fenglala
    OP
    Nov 16, 2022
    10
    dict_x = dict((kv[0], kv[1]) for kv in (element.split('=') for element in str_x.split('/')))
    这个可以了!不用多一次 split !
    hellojay
    hellojay
    Nov 16, 2022
    11
    @fenglala #10

    这个让代码没有任何可读性,你少了一个 split 却多了一个 for

    dict_x = {element.split('=')[0]: element.split('=')[1] for element in str_x.split('/')}

    这个也不爆黄
    xuboying
    xuboying
    Nov 16, 2022❤️1
    12
    能不能说文雅一点的告警或者出错。

    爆黄,在一众标题里显得很黄很暴力。。。
    hsfzxjy
    hsfzxjy
    Nov 16, 2022 via Android
    13
    不要太在意这个,告警是静态检查器蠢,不是你写的有问题
    luckyx
    luckyx
    Nov 16, 2022
    14
    text = 'int_value=233/str_value=hello'

    print({k: v for k,v in [e.split('=') for e in text.split('/')]})

    Leetcode playground 能过 🤔
    yernsun
    yernsun
    Nov 16, 2022❤️1
    15
    import urllib.parse
    dict(urllib.parse.parse_qsl('int_value=233/str_value=hello', separator='/'))
    zhanglintc
    zhanglintc
    Nov 17, 2022
    16
    @xuboying #12 其实应该是“报黄”,哈哈。
    llsquaer
    llsquaer
    Nov 17, 2022
    17
    怎么就那么喜欢一行写代码...

    {key:value for key,value in map(lambda item:item.split('='),str_x.split('/'))}
    u823tg
    u823tg
    Nov 17, 2022❤️1
    18
    是 pycharm 的问题吧, 建议别用-_-。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   1675 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 49ms · UTC 10:24 · PVG 18:24 · LAX 02:24 · JFK 05:24
    ♥ Do have faith in what you're doing.