<p>您可以将字典理解与<code>if</code>过滤一起使用</p>
<pre class="lang-py prettyprint-override"><code>dic = {
"4Fingers Crispy Chicken": ["Fast Food", "L1", "4Fingers Crispy Chicken"],
"Aburi-EN": ["Restaurant", "L1", "Aburi-EN"],
"Ah Chiang's Porridge": ["Eatery", "B1", "Ah Chiang's Porridge"],
"BlackBall": ["Dessert", "B1", "BlackBall"],
}
value_to_search = input("Search:")
result = {
k: v for k, v in dic.items()
if value_to_search in v
}
print(result)
</code></pre>
<p>输出:</p>
<pre><code>Search:B1
{"Ah Chiang's Porridge": ['Eatery', 'B1', "Ah Chiang's Porridge"], 'BlackBall': ['Dessert', 'B1', 'BlackBall']}
</code></pre>
<hr/>
<h3>注:</h3>
<ul>
<li>请注意重新绑定名称<code>dict</code>。这是一个固有的名字</李>
<li>当您在<strong>display</strong>语法中使用尾随逗号时,最好在新行处加上括号(括号、大括号)-除了单元素元组(参见<a href="https://www.python.org/dev/peps/pep-0008/#when-to-use-trailing-commas" rel="nofollow noreferrer">PEP8</a>的第二段)</李>
</ul>
<hr/>
<h3>附加:</h3>
<blockquote>
<p>However, how would I go about searching for two values instead?</p>
</blockquote>
<p>我假设分隔符是<code>|</code></p>
<pre class="lang-py prettyprint-override"><code>value_to_search = input("Search: ")
results = {
target: {
k: v for k, v in dic.items()
if target in v
} for target in value_to_search.split('|')
}
from pprint import pprint # just for posting readability.
pprint(results)
</code></pre>
<p>输出:</p>
<pre><code>Search: L1|B1
{'B1': {"Ah Chiang's Porridge": ['Eatery', 'B1', "Ah Chiang's Porridge"],
'BlackBall': ['Dessert', 'B1', 'BlackBall']},
'L1': {'4Fingers Crispy Chicken': ['Fast Food',
'L1',
'4Fingers Crispy Chicken'],
'Aburi-EN': ['Restaurant', 'L1', 'Aburi-EN']}}
</code></pre>
<hr/>
<blockquote>
<p>I wanted to be able to search for "Fast Food" & " L1" at the same time. And pull out the key&value that matches "Fast Food" & "L1"</p>
</blockquote>
<p>我误解了。答案是这样的</p>
<pre class="lang-py prettyprint-override"><code>value_to_search = input("Search: ")
results = {
k: v for k, v in dic.items()
if all(
target.strip() in v
for target in value_to_search.split('&')
)
}
</code></pre>
<p>输出:</p>
<pre><code>Search: Fast Food & L1
{'4Fingers Crispy Chicken': ['Fast Food', 'L1', '4Fingers Crispy Chicken']}
</code></pre>
<hr/>
<h3>说明</h3>
<ul>
<li><code>{k: v for k, v in dic.items() if ...</code><br/>
它使用满足条件的元素创建新字典</李>
<li><code>all(...)</code><br/>
<code>all</code>是内置函数。您可以看到<a href="https://docs.python.org/3.8/library/functions.html#all" rel="nofollow noreferrer">reference</a>。<br/>
它接受一个<em>iterable</em>并返回True,只有iterable的所有元素都是<code>True</code>。<br/></li>
<li><code>target.strip()</code><br/>
删除目标左侧和右侧的空格(不是字符串内部)</李>
<li><code>value_to_search.split('&')</code><br/>
用<code>&</code>和<code>value_to_search</code>分隔的列表</li>
</ul>