python3选择一个随机字典

时间:2018-09-28 10:57:57

标签: python python-3.x dictionary

我想在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新手的帮助。

2 个答案:

答案 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'])