Python 对于1个字典中的每个值,获取键,对于2个字典中的键,打印所有特定键对的值的差异
这是我第一次来这里,如果我不遵守社区的一些潜规则,我很抱歉 所以我有一本字典Python 对于1个字典中的每个值,获取键,对于2个字典中的键,打印所有特定键对的值的差异,python,python-3.x,loops,dictionary,Python,Python 3.x,Loops,Dictionary,这是我第一次来这里,如果我不遵守社区的一些潜规则,我很抱歉 所以我有一本字典 {'ENST00000309502': ['ADORA1'], 'ENST00000337894': ['ADORA1'], 'ENST00000618295': ['ADORA1'], 'ENST00000380573': ['ADRA1A'], 'ENST00000519229': ['ADRA1A'], 'ENST00000337474': ['AVPR2'], 'ENST00000358927':
{'ENST00000309502': ['ADORA1'],
'ENST00000337894': ['ADORA1'],
'ENST00000618295': ['ADORA1'],
'ENST00000380573': ['ADRA1A'],
'ENST00000519229': ['ADRA1A'],
'ENST00000337474': ['AVPR2'],
'ENST00000358927': ['AVPR2'],
'ENST00000370049': ['AVPR2'],
'ENST00000216629': ['BDKRB1'],
'ENST00000611804': ['BDKRB1']...}
对于每个特定的值,我需要取第二个字典mydict2中的键
{'ENST00000216629':['3.61','3.45','3.65'...]
'ENST00000255380':['3.1','3.05','3.15'...]
'ENST00000304421':['3.61','3.15','3.65'...]...}
我需要找出mydict中相同值的每个键的mydict2值的差异
然后像这样打印结果
mydict[value]mydict2[key1]mydict2[key2]差异(值列表)
ADORA1 ENST0000309502 ENST0000337894[3.61,3.25,3.14]
我只需要一个差的组合,所以只有1-2而不是2-1
对于mydict中的某些值,有两个以上的键。
很抱歉,我是编程新手,我知道我需要if循环,但我不知道如何编写它。
提前感谢您的帮助。为了在
mydict
中循环所有可能的值,我们需要在mydict
中设置一组值。
假设每个值(例如,['ADORA1'])是一个包含一个元素的列表,我们可以使用
set_of_values = {value[0] for value in mydict.values()}
然后,我们需要与每个值对应的mydict键列表。
我们可以使用列表理解并创建一个新的字典,将每个mydict值映射到mydict键列表
reversed_dict = {v:[key for (key, value) in mydict.items() if value[0] == v] for v in set_of_values}
剩下的就直截了当了。对于反向dict中的每个键,我们可以打印相应的mydict键和mydict2值
for (key, values) in reversed_dict.items():
print(f'{key} {values[0]} {values[1]} {mydict2[values[0]]} {mydict2[values[1]]}')
这会打印出来
ADORA1 ENST00000309502 ENST00000337894 [3.61,3.25,3.14, ...] ['3.1','3.05','3.15'...]
比如说
目前尚不清楚清单的区别是什么。如果需要设置差异,可以使用python set,例如
set1 = set(mydict2[values[0]])
set2 = set(mydict2[values[1]])
print(set1 - set2)
我假设你正在寻找这样的东西:
# Loop over the "values" in mydict1 (i.e. the string in the value)
for value in {value[0] for value in mydict1.values()}:
# Find the keys in mydict1 that correspond to the selected value
keys = tuple(key for key in mydict1 if mydict1[key] == [value])
# Loop over pairs of distinct keys
num_of_keys = len(keys)
for key1, key2 in {(keys[i], keys[j])
for i in range(num_of_keys)
for j in range(i+1, num_of_keys)}:
# Check if both keys are keys in mydict2
if (key1 in mydict2) and (key2 in mydict2):
# Calculate the difference: The elements of the values (lists)
# of mydict2 are strings, not numbers: What do you mean by
# 'difference'?
difference = [(float(mydict2[key1]) - float(mydict2[key2][i]))
for i in range(len(mydict2[key1]))]
print(value, key1, key2, difference)
有些事情有点奇怪:
- 如果您确实对字符串感兴趣(这不是问题,只是有点奇怪),为什么mydict1列表的值只包含一个字符串
- “区别”是什么?mydict2(列表)值中的元素是字符串,不是数字
....
# Check if both keys are keys in mydict2
if (key1 in mydict2) and (key2 in mydict2):
# Select all values from mydict2[key1] that are not in
# mydict2[key2]
difference = [value
for value in mydict2[key1]
if value not in mydict2[key2]]
print(value, key1, key2, difference)
什么是
key1
和key2
?以及区别是什么?
?首先让我们看看您尝试了什么。key1和key2是mydict中每个值的ENST对,例如,对于ADORA1,我们有3个ENST,我需要比较它们在mydict2中的值,以便找出对于所有的组合,哪个元素在一个元素中,而不是在另一个元素中欢迎使用堆栈溢出!请拿下,阅读,并提供。“为我实现此功能”是本网站的主题。你必须做一个诚实的尝试,然后问一个关于你的算法或技术的具体问题。非常感谢,这几乎就是我一直在寻找的,是的,不同的是打印一个ENST的元素,而不是另一个,只有一个问题,一些值有多个ENST 3或4,那么我如何打印这些ENST对的所有组合?区别在于第一个ENST中的哪些元素与第二个ENST中的哪些元素比较,然后打印这些元素
....
# Check if both keys are keys in mydict2
if (key1 in mydict2) and (key2 in mydict2):
# Select all values from mydict2[key1] that are not in
# mydict2[key2]
difference = [value
for value in mydict2[key1]
if value not in mydict2[key2]]
print(value, key1, key2, difference)