V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
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 · 2018-12-12 19:46:41 +08:00 · 1568 次点击
    这是一个创建于 2177 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

    需求如下:

    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 条回复    2018-12-12 20:07:15 +08:00
    305835227fadf
        1
    305835227fadf  
    OP
       2018-12-12 19:50:31 +08:00
    贴上去代码乱了,不好意思。
    aijam
        2
    aijam  
       2018-12-12 19:52:33 +08:00   ❤️ 2
    tuple(map(list, zip(*a.items())))
    aijam
        3
    aijam  
       2018-12-12 19:55:03 +08:00
    第二个方法是最好的啦
    305835227fadf
        4
    305835227fadf  
    OP
       2018-12-12 19:55:24 +08:00
    @aijam 我的字典 a 未来会有很多数据,这个解法可以保证随着数据量增大元祖内 2 个 list 都是对应有序的吗大佬
    aijam
        5
    aijam  
       2018-12-12 19:56:43 +08:00
    要保证顺序的话按照我的应该可以
    305835227fadf
        6
    305835227fadf  
    OP
       2018-12-12 19:59:07 +08:00
    @aijam 我不希望出现这样的数据
    a = {'beijing': 20, 'shanghai': 50}
    c = (['beijing', 'shanghai'], [50, 20])
    aijam
        7
    aijam  
       2018-12-12 20:00:11 +08:00
    嗯,那就用我的,没问题
    305835227fadf
        8
    305835227fadf  
    OP
       2018-12-12 20:01:20 +08:00
    @aijam 第二个方法我怕出现刚才我说的那个问题
    aijam
        9
    aijam  
       2018-12-12 20:03:55 +08:00
    我本来以为需要对应所以发了 2 楼,后来又看了一眼你写的还以为不要对应所以发了 3 楼,最后发现你想要对应。:D
    305835227fadf
        10
    305835227fadf  
    OP
       2018-12-12 20:07:15 +08:00
    @aijam 谢谢大佬
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3651 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 10:40 · PVG 18:40 · LAX 02:40 · JFK 05:40
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.