mpe*_*pen 1 python algorithm list set
我有一个这样的嵌套列表:
PLACES = (
('CA', 'Canada', (
('AB', 'Alberta'),
('BC', 'British Columbia' (
('van', 'Vancouver'),
),
...
)),
('US', 'United States', (
('AL', 'Alabama'),
('AK', 'Alaska'),
...
Run Code Online (Sandbox Code Playgroud)
我需要从中检索一些数据.如果depth是0我需要检索所有国家(和它们的代码),如果depth == 1,我需要找回所有的州/省,如果depth == 2我需要检索所有的城市......等等.是否有一些设置库来做这样的事情?或者有人能指出我正确的方向?我开始编写一个解决方案只是为了意识到它不适用于深度超过1的级别,因为你必须进出每个列表......
另请注意,并非所有项目都有第3部分(即,我们假装艾伯塔省没有任何城市,因此在深度2处检索项目只会('van','Vancouver')在这种有限的情况下返回).
我以前没有意识到这一点,但我也需要父值.所以,我修改了interjay的解决方案:
def depth_gen(seq, depth, par=None):
if depth==0:
for x in seq:
yield par, x[0], x[1]
return
for x in seq:
if len(x)==3:
par = x[0]
for y in depth_gen(x[2], depth-1, par):
yield y
Run Code Online (Sandbox Code Playgroud)
我用它来生成一些HTML:
<label for="id-pickup_address-province">Province</label>
<select id="id-pickup_address-province" rel="pickup_address-country" name="pickup_address-province">
<option rel="CA" value="AB">Alberta</option>
<option rel="CA" value="BC">British Columbia</option>
<option rel="CA" value="MB">Manitoba</option>
...
<option rel="US" value="WV">West Virginia</option>
<option rel="US" value="WI">Wisconsin</option>
<option rel="US" value="WY">Wyoming</option>
</select>
<label for="id-pickup_address-country">Country</label>
<select id="id-pickup_address-country" name="pickup_address-country">
<option value="CA">Canada</option>
<option value="US">United States</option>
</select>
Run Code Online (Sandbox Code Playgroud)
然后我应该能够根据选择的国家/地区使用jQuery轻松过滤列表...
这是一个适用于任何深度的解决方案:
def depthGenerator(seq, depth):
if depth==0:
for x in seq:
yield x[:2] #strip subsequences
return
for x in seq:
if len(x)==3: #has subsequence?
for y in depthGenerator(x[2], depth-1):
yield y
Run Code Online (Sandbox Code Playgroud)
例:
>>> list(depthGenerator(PLACES, 1))
[('AB', 'Alberta'), ('BC', 'British Columbia'), ('AL', 'Alabama'), ('AK', 'Alaska')]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
347 次 |
| 最近记录: |