鱼C论坛

 找回密码
 立即注册
查看: 2922|回复: 9

[已解决]如何将一组字符串批量转为字典名?

[复制链接]
发表于 2023-3-11 22:01:15 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
一个班里有很多学生,我将每个学生的名字作为元素创建了一个列表。现在我希望通过for循环,以每个学生的名字作为字典名,批量创建一批字典。
列表:['小明','小强','小红',........]
字典名:小明的成绩,小强的成绩,小红的成绩,.........
各位大佬,该如何做到?多谢了!
最佳答案
2023-3-12 10:58:39
骑士123456 发表于 2023-3-12 08:39
大佬你好,我真的只是想知道如何批量创建字典的方法。“exec、globals改变全局变量的值”这是什么意思啊 ...

建议刚学别用这种不太靠谱的方法,不仅复杂我还感觉会有一定的安全隐患,有些开发环境有可能会把这些方法给 ban 掉,根本用不了。最稳妥的方法还是使用字典存储。
names = ['小明', '小强', '小红']
score = {}
for i in names:
    ch = int(input(f'{i} 语文:'))
    ma = int(input(f'{i} 数学:'))
    en = int(input(f'{i} 英语:'))
    al = ch + ma + en
    score[i] = {'ch' : ch, 'ma' : ma, 'en' : en, 'al' : al}

def print_dict(x): # 这里是打印字典的一个函数,为了让输出更加整齐,不必太注意
    print('{')
    t = 0
    for i in x:
        t += 1
        print('    ', i, ' : \n    ', x[i], sep = '', end = '')
        if t != len(x): print(',')
        print()
    print('}')

    
print_dict(score)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-3-11 22:07:02 | 显示全部楼层
本帖最后由 isdkz 于 2023-3-11 22:10 编辑

像这样子?
students = ['小明', '小强', '小红']
for s in students:
    exec(f'{s}的成绩 = {{}}')

print(globals())

输出:
{'__name__': '__main__', '__doc__': None, '__package__': None, '__loader__': <_frozen_importlib_external.SourceFileLoader object at 0x000001B8888F4790>, '__spec__': None, '__annotations__': {}, '__builtins__': <module 'builtins' (built-in)>, '__file__': 'D:\\secureworks\\important\\study\\Program\\python\\test_example\\test25.py', '__cached__': None, 'students': ['小明', '小强', '小红'], 's': '小 红', '小明的成绩': {}, '小强的成绩': {}, '小红的成绩': {}}

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-3-11 22:54:29 | 显示全部楼层

他是想创造字典;globals()会变,还有其他变量
ls = [..]
dic = {}.fromkeys(ls)
print(dic)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-3-11 23:06:15 | 显示全部楼层
歌者文明清理员 发表于 2023-3-11 22:54
他是想创造字典;globals()会变,还有其他变量

我用那个 globals() 只是想让他看到字典已经被创建出来了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-3-11 23:08:26 | 显示全部楼层
isdkz 发表于 2023-3-11 23:06
我用那个 globals() 只是想让他看到字典已经被创建出来了

我知道,但是他应该不是这个意思,况且新人不大会理解exec、globals改变全局变量的值的
而且万一他用 pycharm 又会标红划出来,新人还是需要有ide辅助的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-3-11 23:10:42 | 显示全部楼层
歌者文明清理员 发表于 2023-3-11 23:08
我知道,但是他应该不是这个意思,况且新人不大会理解exec、globals改变全局变量的值的
而且万一他用 py ...

他不是说要创建一批字典吗?虽然没有必要创建一批字典,但是在代码中创建一批命名有规律的字典就是用 exec 了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-3-11 23:34:46 | 显示全部楼层
for i in ["小明", "小红", "小强"]:
    exec("{0}的成绩 = {{}}".format(i))    #使用exec执行赋值语句
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-3-12 08:39:49 | 显示全部楼层
歌者文明清理员 发表于 2023-3-11 23:08
我知道,但是他应该不是这个意思,况且新人不大会理解exec、globals改变全局变量的值的
而且万一他用 py ...

大佬你好,我真的只是想知道如何批量创建字典的方法。“exec、globals改变全局变量的值”这是什么意思啊?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-3-12 09:55:13 | 显示全部楼层
骑士123456 发表于 2023-3-12 08:39
大佬你好,我真的只是想知道如何批量创建字典的方法。“exec、globals改变全局变量的值”这是什么意思啊 ...

赋值,比如你原来的列表ls,可以用exec('ls=[..]')实现
exec可以运行一段python代码,可以是赋值
globals()获取所有变量,会随着程序同步改变
globals()['a']=123可以将a赋值为123
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-3-12 10:58:39 | 显示全部楼层    本楼为最佳答案   
骑士123456 发表于 2023-3-12 08:39
大佬你好,我真的只是想知道如何批量创建字典的方法。“exec、globals改变全局变量的值”这是什么意思啊 ...

建议刚学别用这种不太靠谱的方法,不仅复杂我还感觉会有一定的安全隐患,有些开发环境有可能会把这些方法给 ban 掉,根本用不了。最稳妥的方法还是使用字典存储。
names = ['小明', '小强', '小红']
score = {}
for i in names:
    ch = int(input(f'{i} 语文:'))
    ma = int(input(f'{i} 数学:'))
    en = int(input(f'{i} 英语:'))
    al = ch + ma + en
    score[i] = {'ch' : ch, 'ma' : ma, 'en' : en, 'al' : al}

def print_dict(x): # 这里是打印字典的一个函数,为了让输出更加整齐,不必太注意
    print('{')
    t = 0
    for i in x:
        t += 1
        print('    ', i, ' : \n    ', x[i], sep = '', end = '')
        if t != len(x): print(',')
        print()
    print('}')

    
print_dict(score)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-24 01:48

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表