我正在使用python 3:我有两个列表,我想使用相似的信息将它们合并到字典中:
first_list = [('1234', 'abcd', 'John Doe', 'good_status'),
('1234', 'efgh', 'John Doe', 'good_status'),
('1234', 'hijk', 'John Doe', 'bad_status'),
('5566', 'abjk', 'George Washington', 'good_status'),
('7889', 'zyxw', 'Jane Austin', bad_status')]
第二个列表可能是:
second_list = [('1234', 'John Doe', 'abcd efgh hijk'),
('5566', 'George Washington', 'abjk'),
('7889', 'Jane Austin', 'zyxw')]
所需字典输出:
dictionary = {'1234' : ('John Doe', 'abcd_good efgh_good hijk_baad')
'5566': ('George Washington', 'abjk_good')
'7889': ('Jane Austin', 'zyxw_bad')
}
在first_list
中,条目[0]
和[2]
与[0]
的条目[1]
和条目second_list
相匹配。
first_list
包含条目[1]
和[3]
,它们应合并在一起并与second_list[2]
哦...而且两个列表的排列并不完全一样,索引的0
可能与0
的索引second_list
的名字不同。
我是新手,有点烦,可以使用任何建议。
答案 0 :(得分:1)
我用两个功能make_dict_from_list
和match_two_dicts
提出了一个解决方案。有多种方法可以使列表理解更简洁,但是我写了很长的一段话,以便更清楚地了解它们在做什么。
def make_dict_from_list(list):
temp_dict={}
for record in list:
for word in record:
if word == record[0]:
temp_dict[record[0]] = []
else:
temp_dict[record[0]].append(word)
return temp_dict
此方法创建一个临时字典,并逐个记录地遍历列表。它将单词的第一个位置(if word = record[0]
)作为字典的键,并设置一个空数组作为该键的值。如果不是第一个单词(即else
),则append
会将该行中的所有其他单词替换为该数组。接下来,您可以调用这些方法来制作字典。预期结果:
>>>>make_dict_from_list(first_list)
{'1234': ['hijk', 'John Doe', 'bad_status'], '5566': ['abjk', 'George Washington', 'good_status'], '7889': ['zyxw', 'Jane Austin', 'bad_status']}
>>>>make_dict_from_list(second_list)
{'1234': ['John Doe', 'abcd efgh hijk'], '5566': ['George Washington', 'abjk'], '7889': ['Jane Austin', 'zyxw']}
现在我们可以进行第二种方法了:
def match_two_dicts(dict1, dict2):
for index1, key1 in enumerate(dict1):
for index2, key2 in enumerate(dict2):
if key1 == key2:
print(f"ID {key1}: match at dict1[{index1}], dict2[{index2}]")
这会将dict1
和dict2
中的条目拆分为键值对列表。我们使用enumerate
,因此我们在每个字典中都有一个位置索引。然后,如果ID(即每个记录的键)匹配,我们就可以打印出匹配的位置。
预期结果:
>>> match_two_dicts(dict1, dict2)
ID 1234: match at dict1[0], dict2[0]
ID 5566: match at dict1[1], dict2[1]
ID 7889: match at dict1[2], dict2[2]
edit:我刚刚注意到您的第一个列表中有重复的ID,但我的解决方案并未对此进行说明。如果这对于您的应用程序是必需的,则您将需要修改代码以使用具有一个键的字典列表,而不是具有多个键的单个字典。如果您有问题,请告诉我。
答案 1 :(得分:0)
您需要一个double for循环来检查每个项目的状态,然后根据匹配项将其组合成字典。
In [33]: np.matrix(x)
Out[33]: matrix([[0, 0, 0, 0]])
In [34]: np.dot(A, np.matrix(x).T)
Out[34]:
matrix([[0],
[0],
[0],
[0]])
答案 2 :(得分:0)
我的解决方案是仅使用bool StringSet(RedisKey key, RedisValue value, TimeSpan? expiry = null, When when = When.Always, CommandFlags flags = CommandFlags.None);
而不引用_redis.StringSet("Key", JsonConvert.SerializeObject(object), new TimeSpan(1, 0, 0));
。
由于我使用了first_list
,因此以下代码可以在second_list
的环境下运行。
下面列出的完整代码:
>=python 3.6