繁体   English   中英

比较列表,字典或集合的另一种解决方案? 我已经尝试了一切

[英]Another solution to comparing lists, dictionaries or sets? I've tried everything

我在sql数据库中有数据,其中每一行都有一个唯一的标识符和一堆用逗号分隔的代码。 我想要做的是列出一个列表,其中每个标识符每行只有一个代码。 导入数据后我做了什么:

rows = cur.fetchall()
for row in rows:
    (pid, codelist) = row
    codes = set()
  for x in codelist.split(','):
     if len(x.strip()) > 0: codes.add(x.strip())
  for code in codes:
     print (pid, code)

现在,我想从事件前到事件后创建2个单独的数据列表,最后,创建一个仅包含时间点A之外的唯一标识符和代码的列表。我尝试比较集合,列表和字典,但我要么会获得两者都通用的标识符和代码,要么会获得事件后唯一的某些代码,但是它以某种方式忽略了事件后特有的其他一些代码。 我怀疑我的数据结构不正确或我的for循环出了点问题,但这与我想要的最接近,但是由于某些原因缺少数据:

rows = cur.fetchall()
rows2 = cur.fetchall()
for row in rows:
   (pid, codelist) = row
   codes = set()
   preEvent= OrderedDict()
   for x in codelist.split(','):
       if len(x.strip()) > 0: codes.add(x.strip())
    for code in codes:
        preEvent[pid]=code
        a=list(preEvent.items())
    for row2 in rows2:
        (pid, codelist) = row2
        codes2= set()
        postEvent= OrderedDict()
        for x in codelist.split(','):
            if len(x.strip()) > 0: codes2.add(x.strip())
        for code in codes2:
            postEvent[pid]=code
            b=list(postEvent.items())
        c=[]
        for i in range(0, len(b)):
         if b[i] not in a:
            c.append(b)
            print(c)

我不确定为什么其他对set(b)-set(a)的尝试不起作用,这本来是更简单的解决方案。 当我这样做时,我得到了一堆匹配的重复项,而不是只有set(b)唯一代码的新集合。 这可能很容易,但是我茫然不知所措!

提前致谢。

假设rows是一个普通list ,例如tuplelist

[(10, 'a'), (10, 'b'), (10, 'c'), (20, 'd') ... ]

我猜是这样的:

unique_in_rows = [val for val in rows if val not in rows2]

这将遍历rows所有元素,并检查是否不在rows2 如果该条件成立,则该元素将附加到unique_in_rows

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM