检查并使用我的数据结构中存在的某个项目

时间:2016-11-04 08:17:47

标签: python list dictionary data-structures matching

我有一个项目列表,例如

item_list = ['char_model_..._main', 'char_model_..._main_default', 'char_rig_..._main', 'char_rig_..._main_default',  'char_acc__..._main']

虽然我能够从列表中获得我想要的某些东西,但我将其编码如下(不是非常有尊严地,但它给了我反馈):

item_wanted=[]
for item in item_list:
    if item.startswith("char_model") and (item.endswith("main") or item.endswith("main_default")):
        item_wanted.append(item)

因此,虽然我能够获得我想要的项目,现在my item_wanted列表包含'char_model_..._main', 'char_model_..._main_default',但我应如何对其进行编码,以便在'main'存在时使用它,否则使用{ {1}}?

3 个答案:

答案 0 :(得分:0)

好吧,我并非绝对有你的意图,但也许你可以尝试将其拆分

if item.startswith("char_model") :
  if item.endswith("main"):
    #do your thing if its "char_model...main"
  elif item.endswith("main_default):
    #do your thing if its "char_model...main"

希望这会有所帮助

答案 1 :(得分:0)

将有效的项目拆分为包含默认的项目和不包含的项目。之后,迭代执行结束默认的那些并尝试在另一个列表中找到相同的键(删除当然结束)。如果不存在,则意味着我们必须使用默认值,如果是,我们将其保留原样。

item_wanted  = []
item_default = []

for item in item_list:
    if item.startswith("char_model"):
        if item.endswith("main_default"):
            item_default.append(item)
        elif item.endswith("main"):
            item_wanted.append(item)

for potential in item_default:
    if potential[:-8] not in item_wanted: #Look for the key without default
        item_wanted.append(potential)     #Append it if not present

答案 2 :(得分:0)

我的方法是只使用两个变量和一个关于输入列表的迭代。它能够在输入中处理多个“good”“best”匹配。为简化起见,我使用了数字列表,对于mainmain_default部分,我过去更喜欢1到2。

代码:

def match(items):
    found1 = None
    found2 = None
    for i in items:
        if (i==1):
            found1 = i
        elif (i==2):
            found2 = i
    return found1 or found2

print (match([2,1]))
print (match([3,2]))
print (match([4,3]))

输出:

1
2
None

https://ideone.com/bBj5Op

看到这个