如何识别字典中的匹配值并仅使用这些键创建一个新字符串?

我有一种方法可以从字符串中提取重复字母并将它们添加到字典中,并将它们重复的次数作为值。现在我想做的是拉出所有具有匹配值的键并创建一个仅包含这些键的字符串。


例子:


text = "theerrrdd"

count = {}

same_value = ""


for ch in text:

    if text.count(ch) > 1:

        count[ch] = text.count(ch)

如何检查具有匹配值的键的计数,如果找到,将这些键添加到 same_value?


因此,在此示例中,“e”和“d”的值都为 2。我想将它们添加到 same_value,以便在调用时 same_value 将返回“ed”。我基本上只是想能够识别哪些字母重复了相同的时间。


蓝山帝景
浏览 201回答 3
3回答

慕后森

首先创建一个字母来计数映射,然后反转这个映射。使用collections模块:from collections import defaultdict, Countertext = 'theerrrdd'# create dictionary mapping letter to countletter_count = Counter(text)# reverse mapping to give count to letters mappingcount_letters = defaultdict(list)for letter, count in letter_count.items():&nbsp; &nbsp; count_letters[count].append(letter)结果:print(count_letters)defaultdict(<class 'list'>, {1: ['t', 'h'],&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;2: ['e', 'd'],&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;3: ['r']})然后,例如,count_letters[2]为您提供在输入字符串中出现两次的所有字母。使用str.count在一个循环是低效的,因为它需要你的字符串的完全重复每个字母。换句话说,这样的算法具有二次复杂度,而collections.Counter具有线性复杂度。

青春有我

另一种方法是使用set()仅获取字符串中的唯一字符,遍历集合并创建一个字典,其中计数是每个计数的字符列表的键。然后,您可以使用 为每个计数生成字符串join()。text = "theerrrdd"chars = set(text)counts = {}for ch in chars:&nbsp; &nbsp; ch_count = text.count(ch)&nbsp; &nbsp; if counts.get(ch_count, None):&nbsp; &nbsp; &nbsp; &nbsp; counts[ch_count].append(ch)&nbsp; &nbsp; else:&nbsp; &nbsp; &nbsp; &nbsp; counts[ch_count] = [ch]# print string of chars where count is 2print(''.join(counts[2]))# OUTPUT# ed

Helenr

我认为最简单的解决方案!from collections import Countertext = "theerrrdd"count = Counter(text)same_value = ''.join([k for k in count.keys() if count[k] > 1])print(count)print(same_value)
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python