Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/364.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.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 如何在键值对中查找小于指定阈值的公用键_Python_Loops_Dictionary_Keyvaluepair - Fatal编程技术网

Python 如何在键值对中查找小于指定阈值的公用键

Python 如何在键值对中查找小于指定阈值的公用键,python,loops,dictionary,keyvaluepair,Python,Loops,Dictionary,Keyvaluepair,我有一个带键值对的听写器,我想将阈值设置为小于50%的值,这基本上意味着在任何键值对中,值对的值小于所有值的50%,我们应该将键值对放入听写器,然后我们在听写器中读取这些键值对,并检查哪些键值会影响门槛 {('a','b'):2,('b','c'):4,('c','d'):6,('d','e'):8,('e','f'):8,('f','g'):3,('g','h'):2,('h','i'):7,(i,j):10} 正如您在上面的听写对(a,b)和(b,c)中所看到的,值2和4小于50%,所以这

我有一个带键值对的听写器,我想将阈值设置为小于50%的值,这基本上意味着在任何键值对中,值对的值小于所有值的50%,我们应该将键值对放入听写器,然后我们在听写器中读取这些键值对,并检查哪些键值会影响门槛

{('a','b'):2,('b','c'):4,('c','d'):6,('d','e'):8,('e','f'):8,('f','g'):3,('g','h'):2,('h','i'):7,(i,j):10}
正如您在上面的听写对
(a,b)
(b,c)
中所看到的,值2和4小于50%,所以这里我们可以说,因为b在这两种情况下都是公共的,这就是为什么值小于50%。所以我想打印b作为输出。对于
(f,g)
(g,h)
对,同样如此,这里的输出也将是g

所以我想要的最终输出是--b,g


请帮助我,我是Python新手…

可能有一个更性感的方法,但这个方法仍然有效,应该是可以理解的

keys_under_threshold = set() 
duplicates = set() 
for key, val in d.items(): 
    if val <= 5: 
        if key[0] not in keys: 
            keys_under_threshold.add(key[0]) 
        else: 
            duplicates.add(key[0]) 
        if key[1] not in keys: 
            keys_under_threshold.add(key[1]) 
        else: 
            duplicates.add(key[1]) 
print(duplicates)
keys\u在\u threshold=set()下
重复项=集合()
对于键,d.items()中的val:

如果val如果您希望从具有类似非重复元组值的字典中获取键,则可以首先筛选出大于5的元组值,然后在它们重复时进行链运算和计数,您需要的工具都可以在Python的标准库中获得:

建立字典:

from collections import Counter
from itertools import chain

dic = {('a','b'):2,('b','c'):4,('c','d'):6,('d','e'):8,('e','f'):8,('f','g'):3,('g','h'):2,('h','i'):7}
less_5 = [k for k,v in dic.items() if v < 5]
counter = Counter(chain.from_iterable(less_5))
counter.most_common()

Output:
[('b', 2), ('g', 2), ('a', 1), ('c', 1), ('f', 1), ('h', 1)]
for k,v in counter.items():
    if v > 1:
        #only print if they key appears in 2 different keys
        print(k)

Output:
b
g
使用列表进行筛选:

from collections import Counter
from itertools import chain

dic = {('a','b'):2,('b','c'):4,('c','d'):6,('d','e'):8,('e','f'):8,('f','g'):3,('g','h'):2,('h','i'):7}
less_5 = [k for k,v in dic.items() if v < 5]
counter = Counter(chain.from_iterable(less_5))
counter.most_common()

Output:
[('b', 2), ('g', 2), ('a', 1), ('c', 1), ('f', 1), ('h', 1)]
for k,v in counter.items():
    if v > 1:
        #only print if they key appears in 2 different keys
        print(k)

Output:
b
g
如果您真的想打印出来:

from collections import Counter
from itertools import chain

dic = {('a','b'):2,('b','c'):4,('c','d'):6,('d','e'):8,('e','f'):8,('f','g'):3,('g','h'):2,('h','i'):7}
less_5 = [k for k,v in dic.items() if v < 5]
counter = Counter(chain.from_iterable(less_5))
counter.most_common()

Output:
[('b', 2), ('g', 2), ('a', 1), ('c', 1), ('f', 1), ('h', 1)]
for k,v in counter.items():
    if v > 1:
        #only print if they key appears in 2 different keys
        print(k)

Output:
b
g

编辑:运营部将问题添加到50%的文件管理器中。

另外,根据这些值计算阈值,并在列表中使用相同的过滤方法

from collections import Counter
from itertools import chain

dic = {('a','b'):2,('b','c'):4,('c','d'):6,('d','e'):8,('e','f'):8,('f','g'):3,('g','h'):2,('h','i'):7,('i','j'):10}

thresh = max(v for v in dic.values())/2 #This sets the threshold at half of max
less_thresh = [k for k,v in dic.items() if v < thresh] #This filters keys less than thresh
counter = Counter(chain.from_iterable(less_thresh))


for k,v in counter.items():
    if v > 1:
        print(k)

Output:
b
g
从集合导入计数器
来自itertools进口链
dic={('a','b'):2,('b','c'):4,('c','d'):6,('d','e'):8,('e','f'):8,('f','g'):3,('g','h'):2,('h','i'):7,('i','j'):10}
thresh=max(v表示dic.values()中的v)/2#这将阈值设置为max的一半
less_thresh=[k代表k,v在dic.items()中,如果v1:
印刷品(k)
输出:
B
G

首先创建包含字母及其值的集合,然后迭代此集合以获得所需结果

data = {('a','b'):2,('b','c'):4,('c','d'):6,('d','e'):8,('e','f'):8,('f','g'):3,('g','h'):2,('h','i'):7}

# collect letters with values
collection = {}
for key, value in data.items():
    collection.setdefault(key[0], []).append(value)
    collection.setdefault(key[1], []).append(value)

# get desired results
for key, value in collection.items():
    if len(value) > 1 and all( i < 5 for i in value):
        print(key)

下面是我如何处理这个问题的:

  • 基于50%的阈值提取所有密钥
  • 将所有提取的键合并到一个元组中
  • 提取
    集合()中的所有重复字母(导致值小于阈值的字母)
  • def获取我的数据(字典,阈值):
    
    如果0,我想将阈值设置为小于50%,这基本上意味着它应该首先读取键值对中的所有值,并从当前场景中的值对10中找到最高值,然后在该值上,它应该将阈值设置为小于50%。我还更新了同样的问题。我想将阈值设置为小于50%,这基本上意味着它应该首先读取键值对中的所有值,并从当前场景中的值对10中找到最高值,然后在该值上,它应该将阈值设置为小于50%。我也更新了同样的问题。我已经编辑了我的答案。我创建了一个简单的函数,它接受字典和阈值作为参数。它还检查阈值是否在0到100%之间。请您解释一下您在这里做什么?我想将阈值设置为小于50%,这基本上意味着它应该首先读取键值对中的所有值,并从当前场景中的值对中找到最高值,即10,然后在该值上设置阈值低于50%。我还更新了同样的问题。我想将阈值设置为小于50%,这基本上意味着它应该首先读取键值对中的所有值,并从当前场景中的值对10中找到最高值,然后在该值上,它应该将阈值设置为小于50%。我也更新了同样的问题。