【发布时间】:2020-04-23 16:36:29
【问题描述】:
我有一个用来填充字典的函数。该函数遍历 QGIS 中的两个图层,并返回图层相交的属性并将键和值分配给 dict,如下所示:
dict[id_code] = value
字典的内容:
{'CB000004657321': 'LT_07324_TRN1', 'CB000004657327': 'LT_07324_TRN1', 'CB000004132360': 'LT_07324_TRN2', 'CB000004132384': 'LT_07324_TRN2', 'CB000004133606': 'LT_07324_TRN2', 'CB000004133629': 'LT_07324_TRN2', 'CB000004131653': 'LT_07324_TRN2', 'CB000004130408': 'LT_07324_TRN2', 'CB000004132025': 'LT_07324_TRN2', 'CB000004131107': 'LT_07324_TRN2', 'CB000004130785': 'LT_07324_TRN2', 'CB000004132780': 'LT_07324_TRN2', 'CB000004130778': 'LT_07324_TRN2', 'CB000004132018': 'LT_07324_TRN2', 'CB000004658296': 'LT_07324_TRN1', 'CB000004657328': 'LT_07324_TRN1'}
该功能工作正常,字典包含预期的所有密钥对。在 dict 中大约有 15 个键值对。现在我正在用 2 个可能的值进行测试。我想做的是根据值(分成两个列表)分离我的字典 - 即 list_1 = ([key + vals]) where vals == 'type_a' / list_2 = ([key + vals]) where vals == 'type_b' 等
到目前为止我尝试过的是:
-
我在字典中使用 :
s_vals = set(dict.values())获得了一组唯一值,我在下面的循环中使用了这些值。我使用的是 s_val 而不仅仅是硬编码的值,因为这些值可以在项目之间改变(因此我首先设置一个唯一值)
-
我创建了 2 个空列表:
list_1 = [] list_2 = [] -
然后我使用下面的函数来填充我的列表:
def fn_ouput_list(liste, dict): for elem in s_vals: for key, value in dict.items(): if dict[key][:] == elem: liste.extend([key, value]) return liste list_1 = fn_ouput_list(list_1, dict) list_2 = fn_ouput_list(list_2, dict)
问题是我的函数产生了两个相同的列表,所有的键值对,我真的不明白为什么?
我试图将字典分成两个列表,但两个字典可能更好/更容易吗?
【问题讨论】:
-
欢迎来到 SO!此示例不是诊断问题所必需的minimal reproducible example,但根据您所显示的,您使用相同的字典调用相同的函数,那么为什么输出应该不同?
-
@ggorlen 嗨,感谢您的回复。我正在尝试使用值将单个字典拆分为多个列表 - 因此所有值为“A”的键值对都在 list_1 中,所有值为“B”的键值对都在列表_2。就是这个想法,再次查看该功能,我怀疑它是否会起作用...您要我发布字典的内容吗?
-
是的,请出示您开始使用的字典和预期的结果结构。谢谢。
-
@ggorlan 谢谢我已经添加了字典内容和其他一些 cmets
标签: python list dictionary