<p>你可以这样做:</p>
<pre><code>all_areas = [90219, 90220]
zips = {zipcode: code_members(zipcode) for zipcode in all_areas}
def code_members(zipcode):
if zipcode == 90219:
return dict(members=120, offices=18, membersperoffice=28)
return dict(members=423, offices=37, membersperoffice=16)
</code></pre>
<hr/>
<blockquote>
<p>I think I need to build the nested dicts, and then process several
lists against conditionals, passing resulting values into the
corresponding dicts on the fly (<strong>i.e. based on how many times a zip
code exists in the list</strong>).</p>
</blockquote>
<p>使用上述方法,如果<code>zipcode</code>多次出现在<code>all_areas</code>列表中,则生成的<code>zip</code>字典将只包含<code>zipcode</code>的一个实例。你知道吗</p>
<blockquote>
<p>Is using nested dictionaries the most pythonic way of doing this? Is
it cumbersome? Is there a better way?</p>
</blockquote>
<p>我建议做一个简单的对象来表示每个<code>zipcode</code>的值。一些简单的事情,比如:</p>
<p>使用数据类:</p>
<pre><code>@dataclass.dataclass
class ZipProperties(object):
members: int
offices: int
membersperoffice: int
</code></pre>
<p>使用命名元组:</p>
<pre><code>ZipProperties = collections.namedtuple('ZipProperties', ['members', 'offices', 'membersperoffice'])
</code></pre>
<p>然后可以将<code>code_members</code>函数更改为:</p>
<pre><code>def code_members(zipcode):
if zipcode == 90219:
return ZipProperties(120, 18, 28)
return ZipProperties(423, 37, 16)
</code></pre>
<hr/>
<p>举一个具体的例子:</p>
<ol>
<li>确定名为membersperzip的列表中有多少个zipcode实例</li>
<li>在名为zips的dict中查找与zipcode同名的相应嵌套dict</li>
<li>将值传递给相应的键,称为“成员”(或任何键)</li>
</ol>
<pre><code>membersperzip: typings.List[Tuple[int, int]] = [(90219, 54)]
for zip, members in membersperzip:
for zipcode, props in zips.items():
if zipcode == zip:
props.members = members
</code></pre>