为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

蓝山帝景 2021-09-28 17:47:55
我有一种方法可以从字符串中提取重复字母并将它们添加到字典中,并将它们重复的次数作为值。现在我想做的是拉出所有具有匹配值的键并创建一个仅包含这些键的字符串。例子: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”。我基本上只是想能够识别哪些字母重复了相同的时间。
查看完整描述

3 回答

?
慕后森

TA贡献1802条经验 获得超5个赞

首先创建一个字母来计数映射,然后反转这个映射。使用collections模块:


from collections import defaultdict, Counter


text = 'theerrrdd'


# create dictionary mapping letter to count

letter_count = Counter(text)


# reverse mapping to give count to letters mapping

count_letters = defaultdict(list)

for letter, count in letter_count.items():

    count_letters[count].append(letter)

结果:


print(count_letters)


defaultdict(<class 'list'>, {1: ['t', 'h'],

                             2: ['e', 'd'],

                             3: ['r']})

然后,例如,count_letters[2]为您提供在输入字符串中出现两次的所有字母。


使用str.count在一个循环是低效的,因为它需要你的字符串的完全重复每个字母。换句话说,这样的算法具有二次复杂度,而collections.Counter具有线性复杂度。


查看完整回答
反对 回复 2021-09-28
?
青春有我

TA贡献1784条经验 获得超8个赞

另一种方法是使用set()仅获取字符串中的唯一字符,遍历集合并创建一个字典,其中计数是每个计数的字符列表的键。然后,您可以使用 为每个计数生成字符串join()。


text = "theerrrdd"

chars = set(text)

counts = {}


for ch in chars:

    ch_count = text.count(ch)

    if counts.get(ch_count, None):

        counts[ch_count].append(ch)

    else:

        counts[ch_count] = [ch]


# print string of chars where count is 2

print(''.join(counts[2]))

# OUTPUT

# ed


查看完整回答
反对 回复 2021-09-28
?
Helenr

TA贡献1780条经验 获得超4个赞

我认为最简单的解决方案!


from collections import Counter


text = "theerrrdd"

count = Counter(text)

same_value = ''.join([k for k in count.keys() if count[k] > 1])


print(count)

print(same_value)


查看完整回答
反对 回复 2021-09-28
  • 3 回答
  • 0 关注
  • 200 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信