Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 对于1个字典中的每个值,获取键,对于2个字典中的键,打印所有特定键对的值的差异_Python_Python 3.x_Loops_Dictionary - Fatal编程技术网

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)