Python 使用哈希

Python 使用哈希,python,ruby,Python,Ruby,我想像这样创建一个哈希(字典):dic={2=>“ABC”,3=>“DEF”}。在python中,代码如下所示: text = "abcdef" for letter in text.lower(): for group, number in dic.items(): if letter in group: 对于文本中的每个字母,de代码在字典中查找相同的字母。我怎么用ruby做这个?有什么想法吗?这是您代码的直接翻译(顺便说一下,与您的描述不符): 然而,这是

我想像这样创建一个哈希(字典):
dic={2=>“ABC”,3=>“DEF”}
。在python中,代码如下所示:

text = "abcdef"  

for letter in text.lower():
    for group, number in dic.items(): 
        if letter in group:

对于文本中的每个字母,de代码在字典中查找相同的字母。我怎么用ruby做这个?有什么想法吗?

这是您代码的直接翻译(顺便说一下,与您的描述不符):

然而,这是O(n^2),这意味着它是低效的。您最好构建一个更好的散列:

hash = {
  "abc" => 1,
  "def" => 2,
}

new_hash = {}

hash.each_pair do |key, val|
  key.each_char do |char|
    new_hash[char] = val
  end
end

p new_hash

--output:--
{"a"=>1, "b"=>1, "c"=>1, "d"=>2, "e"=>2, "f"=>2}
使用该代码,您只需遍历一次散列即可创建新的散列,后续的散列查找非常高效。使用原始代码,可以遍历字符串中每个字母的整个哈希

test = "abcdef"
dic = {2 => "ABC", 3 => "DEF"}
test.each_char { |s|
    dic.each { |key, val|
        puts key if val.include?(s.upcase)          
    }
}
这是你的意思吗

text = "abcdef"
hash = {2 => "ABC", 3 => "DEF"}
text.upcase.each_char do |c|
  puts hash.keys.find{|k| hash[k].include?(c.upcase)}
end
这将产生:

2 2 2 3 3 3 2. 2. 2. 3. 3. 3.
似乎您需要不区分大小写的搜索,所以我在两个数据源上都调用
upcase
。如果
text
保证为小写或哈希值保证为大写,则可以删除其中一个。与现有答案相比,它的一个好处是,它只会搜索,直到找到匹配的值,我认为这是您想要的。如果找不到匹配值,搜索将返回
nil

看起来您知道如何声明哈希。你的问题是什么?我有这个散列,我想输入一个字母,我想输入字母对应的数字。例如:我输入字母C,Python和Ruby中的返回值都是2,我认为您的哈希值是反向的。您应该搜索键并返回值,而不是搜索值并返回键。。。但我就是这么想的。实际上,我会将这些值分割成单独的散列键,并使每个点指向相同的值,这样查找就简单多了。+1,这就是我要做的。效率更高,速度更快。这正是我想要的!!!非常感谢@用户2442149,但根据这五个蠢货的说法:“squiguy,Talonmes,sawa,Vin,soon”,你的问题不是一个真正的问题。 2 2 2 3 3 3