我想在Python3中选择一个随机字典。 我有一个像这样的功能 foobar :
def foobar(region_name, table_name, key=None, regex=None):
dynamodb = boto3.resource('dynamodb', region_name=region_name)
table = dynamodb.Table(table_name)
regex = regex
response = table.scan(
Select="ALL_ATTRIBUTES"
)
if regex:
r = re.compile(regex)
slots = [slot for slot in response['Items'] if r.search(slot[key])]
for slot in slots:
print(slot)
else:
print(response['Items'])
返回多个字典,如下所示:
{'A': 'none', 'B': 'none', 'C': 'off', 'D': 'none', 'E': 'none'}
{'A': 'foobar', 'B': 'foobar', 'C': 'off', 'D': 'foobar', 'E': 'none'}
{'A': 'magic', 'B': 'none', 'C': 'off', 'D': 'magic', 'E': 'none'}
我正在创建另一个函数,以便能够选择随机字典。
我的第一步是将函数 foobar 的结果放入这样的变量中:
hello = foobar(region_name, table_name, key, regex)
然后对其应用随机方法:
print(random.choice(hello))
它给我一个错误 TypeError:类型为'NoneType'的对象没有len()
此外,如果我打印变量hello
的类型,它会给我<class 'NoneType'>
我想是因为字典是不同的实体,但是我不确定如何解决这个问题。
在这种情况下,选择随机词典的最佳方法是什么?
谢谢Python新手的帮助。
答案 0 :(得分:0)
在foobar函数末尾错过了return response['Items']
假设response ['Items']返回字典列表,则只需使用random.choice(response['Items'])
如果在任何情况下,response ['Items']返回的字典都包含乘法字典。采用
key_lst=list(the_dict.keys())
print(the_dict[random.choice(key_lst)])
从一个包含随机乘法的字典中获取随机字典
答案 1 :(得分:0)
在if和else循环中,返回语句已被修改。基本上,您需要从foobar函数返回一些内容。
def foobar(region_name, table_name, key=None, regex=None):
'''
Returns empty list If regex is False
else If regex is True then returns a
list of dictionaries.
'''
dynamodb = boto3.resource('dynamodb', region_name=region_name)
table = dynamodb.Table(table_name)
regex = regex # This is redundant
response = table.scan(
Select="ALL_ATTRIBUTES"
)
if regex:
r = re.compile(regex)
slots = [slot for slot in response['Items'] if r.search(slot[key])]
for slot in slots:
print(slot)
return []
else:
print(response['Items'])
return list(response['Items'])