Python: 在 shelf 中声明多个键的最佳方式

Python: Best way to declare more than one keys in a shelf

背景:我正在尝试上架python,想做一个最基本的程序来尝试一下方法

我写了这段代码:

#creates a shelf, with 3 set keys and 3 input values 然后打印它

import shelve

settings_shelf = shelve.open('TempData')

settings_shelf['volume'] = input()
settings_shelf['graphics'] = input()
settings_shelf['auto-save'] = input()

print(list(settings_shelf.keys())+ list(" ") + list(settings_shelf.values()))

settings_shelf.close()

有没有更好的格式化方法?而不是输入 3 行? 我发现了这个:Any way to use a tuple as key in a shelf? (Python) 但我并没有真正理解答案..

我试过 settings_shelf['volume','graphics'] = input(),input() 但它抛出了这个错误:即使它接受两个输入 Traceback(最近一次调用最后一次):

File "C:\Users\Simone\dev\Automate The Boring Stuff with Python\shelves.py", line 5, in settings_shelf['volume','graphics'] = input(),input() File "C:\Users\Simone\AppData\Local\Programs\Python\Python310\lib\shelve.py", line 125, in setitem self.dict[key.encode(self.keyencoding)] = f.getvalue() AttributeError: 'tuple' object has no attribute 'encode'

我尝试添加 print(tuple(xyz)) 但仍然无效。

另外.. 是否可以写类似 settings_shelf[input() = input() 的东西? 我也试过了但是它弄乱了最终结果它切换了最后一个键和值

来自 shelve 文档:

The keys are ordinary strings.

因此您需要将元组转换为字符串,如果需要,稍后再将其转换回来。

使用列表和 json 模块并不容易

示例如下:

import json
import shelve

settings_shelf = shelve.open('TempData')

obj = {
    'volume': 123,
    'graphics': 456,
    'auto-save': True,
}

folder, name = 'some', 'obj'

# Convert list to string
obj_key = json.dumps([folder, name])
print(obj_key)
# => '["some", "obj"]'

settings_shelf[obj_key] = obj

print(settings_shelf[obj_key])
# => {'volume': 123, 'graphics': 456, 'auto-save': True}

# Convert string back to objects
folder, name = json.loads(obj_key)
print(folder, name)
# => 'some obj'