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

Python 字典转元祖问题

  •  
  •   305835227fadf · Dec 12, 2018 · 2213 views
    This topic created in 2847 days ago, the information mentioned may be changed or developed.

    求各位大佬帮忙,本人新手遇到问题有点烦躁,如下:

    需求如下:

    Python2.7

    a = {"beijing":20,"shanghai":30}

    想要得到:

    b = (["beijing","shanghai"],[20,30])

    并且希望元祖 b 中我想 2 个列表内元素的值都能和字典 a 中相匹配

    分割线*************

    我自己的瞎搞的几个解法,不知道对不对,如下:

    第一个方法: a = {"beijing":20,"shanghai":30} cc = ( [a1 for a1 in a.viewkeys()],[a2 for a2 in a.viewvalues()] ) 看起来结果是对的,但是不确定当 a 内的元素增多时是否结果还是对的。

    第二个方法: a = {"beijing":20,"shanghai":30} cc = (a.keys(),a.values()) 看起来结果和第一个方法是一样的,但是也不确定当 a 内的元素增多时是否结果还是对的。

    第三个方法: In [124]: a Out[124]: {'beijing': 20, 'shanghai': 50}

    In [125]:

    In [125]: a1 = []

    In [126]: a2 = []

    In [127]: for x,y in a.iteritems(): ...: a1.append(x) ...: a2.append(y) ...:

    In [128]: cc = (a1,a2)

    In [129]: cc Out[129]: (['beijing', 'shanghai'], [20, 50])

    希望各位大佬多指点,非常感谢!

    10 replies  •  2018-12-12 20:07:15 +08:00
    305835227fadf
        1
    305835227fadf  
    OP
       Dec 12, 2018
    贴上去代码乱了,不好意思。
    aijam
        2
    aijam  
       Dec 12, 2018   ❤️ 2
    tuple(map(list, zip(*a.items())))
    aijam
        3
    aijam  
       Dec 12, 2018
    第二个方法是最好的啦
    305835227fadf
        4
    305835227fadf  
    OP
       Dec 12, 2018
    @aijam 我的字典 a 未来会有很多数据,这个解法可以保证随着数据量增大元祖内 2 个 list 都是对应有序的吗大佬
    aijam
        5
    aijam  
       Dec 12, 2018
    要保证顺序的话按照我的应该可以
    305835227fadf
        6
    305835227fadf  
    OP
       Dec 12, 2018
    @aijam 我不希望出现这样的数据
    a = {'beijing': 20, 'shanghai': 50}
    c = (['beijing', 'shanghai'], [50, 20])
    aijam
        7
    aijam  
       Dec 12, 2018
    嗯,那就用我的,没问题
    305835227fadf
        8
    305835227fadf  
    OP
       Dec 12, 2018
    @aijam 第二个方法我怕出现刚才我说的那个问题
    aijam
        9
    aijam  
       Dec 12, 2018
    我本来以为需要对应所以发了 2 楼,后来又看了一眼你写的还以为不要对应所以发了 3 楼,最后发现你想要对应。:D
    305835227fadf
        10
    305835227fadf  
    OP
       Dec 12, 2018
    @aijam 谢谢大佬
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   2522 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 15:40 · PVG 23:40 · LAX 08:40 · JFK 11:40
    ♥ Do have faith in what you're doing.