骑士123456 发表于 2023-3-11 22:01:15

如何将一组字符串批量转为字典名?

一个班里有很多学生,我将每个学生的名字作为元素创建了一个列表。现在我希望通过for循环,以每个学生的名字作为字典名,批量创建一批字典。
列表:['小明','小强','小红',........]
字典名:小明的成绩,小强的成绩,小红的成绩,.........
各位大佬,该如何做到?多谢了!

isdkz 发表于 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': '小 红', '小明的成绩': {}, '小强的成绩': {}, '小红的成绩': {}}

歌者文明清理员 发表于 2023-3-11 22:54:29

isdkz 发表于 2023-3-11 22:07
像这样子?




他是想创造字典;globals()会变,还有其他变量
ls = [..]
dic = {}.fromkeys(ls)
print(dic)

isdkz 发表于 2023-3-11 23:06:15

歌者文明清理员 发表于 2023-3-11 22:54
他是想创造字典;globals()会变,还有其他变量

我用那个 globals() 只是想让他看到字典已经被创建出来了

歌者文明清理员 发表于 2023-3-11 23:08:26

isdkz 发表于 2023-3-11 23:06
我用那个 globals() 只是想让他看到字典已经被创建出来了

我知道,但是他应该不是这个意思,况且新人不大会理解exec、globals改变全局变量的值的
而且万一他用 pycharm 又会标红划出来,新人还是需要有ide辅助的

isdkz 发表于 2023-3-11 23:10:42

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

他不是说要创建一批字典吗?虽然没有必要创建一批字典,但是在代码中创建一批命名有规律的字典就是用 exec 了

KeyError 发表于 2023-3-11 23:34:46

for i in ["小明", "小红", "小强"]:
    exec("{0}的成绩 = {{}}".format(i))    #使用exec执行赋值语句

骑士123456 发表于 2023-3-12 08:39:49

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

大佬你好,我真的只是想知道如何批量创建字典的方法。“exec、globals改变全局变量的值”这是什么意思啊?

歌者文明清理员 发表于 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

tommyyu 发表于 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 = {'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, sep = '', end = '')
      if t != len(x): print(',')
      print()
    print('}')

   
print_dict(score)
页: [1]
查看完整版本: 如何将一组字符串批量转为字典名?