Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/350.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
比较python字典列表与列顺序公差_Python_List_Hash_Dictionary - Fatal编程技术网

比较python字典列表与列顺序公差

比较python字典列表与列顺序公差,python,list,hash,dictionary,Python,List,Hash,Dictionary,表2 first = [{'a':'aaa','b':'ccc','c':'bbb','d':'ddd'}, {'a':'bb','b':2,'c':1,'d':3}, {'a':'cc','b':22,'c':11,'d':33}] second = [{'a':'aaa','b':'bbb','c':'ccc','d':'ddd'}, {'a':'bb','b':1,'c':2,'d':3},

表2

    first = [{'a':'aaa','b':'ccc','c':'bbb','d':'ddd'},
             {'a':'bb','b':2,'c':1,'d':3},
             {'a':'cc','b':22,'c':11,'d':33}]

    second = [{'a':'aaa','b':'bbb','c':'ccc','d':'ddd'},
              {'a':'bb','b':1,'c':2,'d':3},
              {'a':'cc','b':11,'c':22,'d':33}]
表1

    |'a'  | 'b' | 'c' |'d'  |
    |'aaa'|'bbb'|'ccc'|'ddd'|
    |'bb' |1    |2    |3    |
    |'cc' |11   |22   |33   |
在上表中,第一行的顺序相同。第二行属性是主键。即使它们的顺序发生变化,但下面的值很好,它们也是相等的

我有两个表,它们在代码中转换为字典列表。表的第一行是字典的键。我必须对这两个进行比较,这样即使列顺序从第二行开始发生变化,这两个实体也是相同的。所以在上面的例子中,它们是相同的


换句话说,dictionary的键不是表的主键。第二行属性是。如何编写代码来执行此类比较。

如果唯一值的顺序无关紧要,并且可以忽略键:

    |'a'  | 'b' | 'c' |'d'  |
    |'aaa'|'ccc'|'bbb'|'ddd'|
    |'bb' |2    |1    |3    |
    |'cc' |22   |11   |33   |
似乎您实际上想知道两个表是否具有相同的列,忽略列顺序:

key = lambda d: set(d.values())
eq = all(a == b for a, b in zip(map(key, first), map(key, second)))
函数compare()根据我理解的相等条件比较第一个匹配和第二个匹配,如果相等,则返回True

def columns(table):
    values = lambda d: map(d.get, table[0]) # use same order for rows
    return zip(*[values(row) for row in table]) # transpose

def equal_columns(first, second):
    return sorted(columns(first)) == sorted(columns(second))

在不同的地方张贴一个例子。我不清楚你想做什么…检查两个列表是否包含相同的DICT?我建议你也以表格形式张贴两个DICT,并显示你想要比较的内容。现在很难理解你的意图。第一个=[{'a':无,'b':'ccc','c':'bbb','d':'ddd'},{'a':'bb','b':2,'c':4,'d':3},{'a':'cc','b':22,'c':44,'d':33}]如果第一个是这样的,第一个和第二个是不同的,不要把它放在评论中。代替你的问题谢谢塞巴斯蒂安和加托!这只是比较值,但它们不是按您要求的键排序的。。。这就是你的意思吗?不完全正确,但我需要写答案!
first = [{'a':'aaa','b':'ccc','c':'bbb','d':'ddd'},
         {'a':'bb','b':2,'c':1,'d':3},
         {'a':'cc','b':22,'c':11,'d':33}]

second = [{'a':'aaa','b':'bbb','c':'ccc','d':'ddd'},
          {'a':'bb','b':1,'c':2,'d':3},
          {'a':'cc','b':11,'c':22,'d':33}]


def compare(first,second):
    for a,b in zip(first, second):
        vals_a = list(a.values())
        vals_b = list(b.values())

        vals_a.sort()
        vals_b.sort()

        if vals_a != vals_b:
            return False

    return True

print compare(first,second)