[英]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
,例如tuple
的list
[(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.