如何将一组字符串批量转为字典名?
一个班里有很多学生,我将每个学生的名字作为元素创建了一个列表。现在我希望通过for循环,以每个学生的名字作为字典名,批量创建一批字典。列表:['小明','小强','小红',........]
字典名:小明的成绩,小强的成绩,小红的成绩,.........
各位大佬,该如何做到?多谢了! 本帖最后由 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': '小 红', '小明的成绩': {}, '小强的成绩': {}, '小红的成绩': {}}
isdkz 发表于 2023-3-11 22:07
像这样子?
他是想创造字典;globals()会变,还有其他变量
ls = [..]
dic = {}.fromkeys(ls)
print(dic) 歌者文明清理员 发表于 2023-3-11 22:54
他是想创造字典;globals()会变,还有其他变量
我用那个 globals() 只是想让他看到字典已经被创建出来了 isdkz 发表于 2023-3-11 23:06
我用那个 globals() 只是想让他看到字典已经被创建出来了
我知道,但是他应该不是这个意思,况且新人不大会理解exec、globals改变全局变量的值的
而且万一他用 pycharm 又会标红划出来,新人还是需要有ide辅助的 歌者文明清理员 发表于 2023-3-11 23:08
我知道,但是他应该不是这个意思,况且新人不大会理解exec、globals改变全局变量的值的
而且万一他用 py ...
他不是说要创建一批字典吗?虽然没有必要创建一批字典,但是在代码中创建一批命名有规律的字典就是用 exec 了 for i in ["小明", "小红", "小强"]:
exec("{0}的成绩 = {{}}".format(i)) #使用exec执行赋值语句 歌者文明清理员 发表于 2023-3-11 23:08
我知道,但是他应该不是这个意思,况且新人不大会理解exec、globals改变全局变量的值的
而且万一他用 py ...
大佬你好,我真的只是想知道如何批量创建字典的方法。“exec、globals改变全局变量的值”这是什么意思啊? 骑士123456 发表于 2023-3-12 08:39
大佬你好,我真的只是想知道如何批量创建字典的方法。“exec、globals改变全局变量的值”这是什么意思啊 ...
赋值,比如你原来的列表ls,可以用exec('ls=[..]')实现
exec可以运行一段python代码,可以是赋值
globals()获取所有变量,会随着程序同步改变
globals()['a']=123可以将a赋值为123 骑士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]