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
u2gign
V2EX  ›  Python

如何在 for 循环中赋值给不同的变量

  •  
  •   u2gign · 2019-10-22 14:23:07 +08:00 · 3993 次点击
    这是一个创建于 1619 天前的主题,其中的信息可能已经有所发展或是发生改变。
    例如我想生成很多的变量,a1=1,a2=2,a3=3,a4=4 ...
    第 1 条附言  ·  2019-10-22 15:02:05 +08:00
    实际需求是需要生成一个配置文件,这个文件通过传进来的 list,生成很多信息
    格式类似如下,应该会有 100 多条这种信息
    xx1 = {
    'id':1,
    'hosts': '1.1.1.1',
    'port': 22222,
    'username': 'root',
    'pwd': 'aaaaaaaaaaaaaa'
    }
    xx2 = {
    'id':2,
    'hosts': '2.2.2.2',
    'username': 'root',
    'pwd': 'sssssssssssss'
    }
    ...
    20 条回复    2019-10-23 00:41:47 +08:00
    qwerthhusn
        1
    qwerthhusn  
       2019-10-22 14:27:50 +08:00
    OMG,list 不行?
    airfling
        2
    airfling  
       2019-10-22 14:30:00 +08:00
    矩阵不行吗,数组不行吗,list 不行吗
    Joyboo
        3
    Joyboo  
       2019-10-22 14:30:18 +08:00
    可变变量
    littleylv
        4
    littleylv  
       2019-10-22 14:33:16 +08:00
    ```php
    <?php
    for ($i = 1; $i <= 4; $i++) {
    $k = 'a' . $i;
    $$k = $i;
    }
    var_dump($a1);
    var_dump($a2);
    var_dump($a3);
    var_dump($a4);
    ```

    python 不懂
    ipwx
        5
    ipwx  
       2019-10-22 14:34:20 +08:00 via Android
    意义何在
    arrow8899
        6
    arrow8899  
       2019-10-22 14:48:50 +08:00
    https://en.wikipedia.org/wiki/XY_problem
    直接说你的原始需求
    airdge
        7
    airdge  
       2019-10-22 14:50:29 +08:00
    locals()['a1']=1
    JeffGe
        8
    JeffGe  
       2019-10-22 14:55:53 +08:00 via Android
    可以用 locals() 或者 globals()
    但为什么要这么做?你是什么样的需求不能用 list 吗?
    u2gign
        9
    u2gign  
    OP
       2019-10-22 14:57:48 +08:00
    @arrow8899 我要生成一个配置文件 根据传进来的 list 生成很多配置信息
    krixaar
        10
    krixaar  
       2019-10-22 15:03:13 +08:00
    字典不行吗,和一堆变量用起来没啥区别啊
    JeffGe
        11
    JeffGe  
       2019-10-22 15:04:58 +08:00 via Android
    @u2gign 那用 dict 更好吧

    config["a1"] = 1
    fhy1994
        12
    fhy1994  
       2019-10-22 15:11:17 +08:00
    ```
    name_dict = {}
    for i in range(1, 5):
    k = 'a' + str(i)
    name_dict['%s' % k] = i

    print(name_dict)
    ```

    输出:

    {'a3': 3, 'a1': 1, 'a2': 2, 'a4': 4}
    wym7223645
        13
    wym7223645  
       2019-10-22 15:18:20 +08:00
    //用 map,key 是变量名,value 是实际的值, key 动态生成
    for (int i = 0; i < list.size; i++) {
    map.put("a"+1,"实际的值");
    }

    大概这样应该可以吧
    fhy1994
        14
    fhy1994  
       2019-10-22 15:21:45 +08:00
    #12 补充
    如需变量名将 name_dict = {} 改为 name_dict = locals()
    Trim21
        15
    Trim21  
       2019-10-22 15:23:15 +08:00 via Android
    你把 xx1 xx2 什么的也放到一个 list 里面或者一个 dict 里面

    最后生成一个这个


    [{
    'id':1,
    'hosts': '1.1.1.1',
    'port': 22222,
    'username': 'root',
    'pwd': 'aaaaaaaaaaaaaa'
    },
    {
    'id':2,
    'hosts': '2.2.2.2',
    'username': 'root',
    'pwd': 'sssssssssssss'
    }]
    cyrbuzz
        16
    cyrbuzz  
       2019-10-22 15:34:05 +08:00
    以前我也有这么个需求,后来发现变量是保存在`locals()`和`globals()`里的,再后来发现用不着这样做。
    `locals()`和`globals()`也是个字典,直接用字典就好了。
    lanshee
        17
    lanshee  
       2019-10-22 17:18:17 +08:00
    要变量名就 dict,不要就是 list
    u2gign
        18
    u2gign  
    OP
       2019-10-22 18:23:51 +08:00
    多谢各位
    secondwtq
        19
    secondwtq  
       2019-10-22 23:16:36 +08:00
    楼主以前不会是用 LISP 的吧 ...
    necomancer
        20
    necomancer  
       2019-10-23 00:41:47 +08:00
    locals()
    这个字典里放的是命名的变量。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   2566 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 00:02 · PVG 08:02 · LAX 17:02 · JFK 20:02
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.