python 验证一个字典的列表,它都包含相同的长度

dxxyhpgq  于 12个月前  发布在  Python
关注(0)|答案(3)|浏览(139)

我有一本像这样的字典

dic = {'x': [1, 2], 'z': [1, 3], 'r': [4, 5]}

字符串
我试图找出一种方法来检查字典中的所有值都具有相同的列表长度。
我尝试了以下方法

if (len(dic['x']) == len(dic['r']) == len(dic['z'])):


这是可行的,但我正在寻找一种方法来做到这一点,而不知道字典的关键,因为他们可能会有所不同。

q3aa0525

q3aa05251#

试试这样的东西:

vals = dic.values()
l = len(vals[0])
if all(len(item) == l for item in vals):
    # ok

字符串
或者,也许是这样的:

lens = map(len, dic.values())
if len(set(lens)) == 1:
    # ok

p3rjfoxz

p3rjfoxz2#

这在Python 2和Python 3上都适用:

>>> dic = {'x': [1, 2], 'z': [1, 3], 'r': [4, 5]}
>>> f = len(dic[next(iter(dic))])
>>> all(len(x) == f for x in dic.values())
True

字符串
如果项目数量很大,那么最好只遍历dict本身,因为dic.values()将返回Python2中所有值的列表(您可以使用dict.itervalues来获取Python2中的迭代器)。

>>> all(len(dic[k]) == f for k in dic)
True

u0sqgete

u0sqgete3#

下面的代码处理并非所有字典元素都是列表的情况。

def _all_lists_in_dict_have_the_same_length(data: dict) -> bool:
    items_length_set = set()
    for val in data.values():
        if not isinstance(val, list):
            continue
        items_length_set.add(len(val))
    if len(items_length_set) != 1:
        return False
    return True

字符串

相关问题