我需要创建一个查找表来存储表格数据,并根据多个字段值检索记录。
我找到了一个示例post # 15418386,它几乎可以满足我的需要,但无论传递的参数如何,它总是返回相同的记录。 我列出了这篇文章底部的代码,在casr中链接不起作用。
我已经验证了文件是否正确读取,并且使用IDE中的调试器(我正在使用PyCharm)正确填充数据表。
代码中包含的测试数据是:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent" android:layout_height="match_parent">
<EditText
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/reactants"
android:layout_alignParentTop="true"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:layout_marginTop="95dp"
android:textSize="20sp"
android:inputType="text" />
<EditText
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/products"
android:layout_alignBottom="@+id/reactants"
android:layout_alignParentRight="true"
android:layout_alignParentEnd="true"
android:textSize="20sp"
android:inputType="text" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/balanced_equation"
android:layout_centerVertical="true"
android:layout_centerHorizontal="true"
android:textSize="30sp" />
<!--should make text bold and black-->
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/beq"
android:id="@+id/title"
android:textSize="35sp"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true"
android:textStyle = "bold"/>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/button"
android:id="@+id/button"
android:layout_alignParentBottom="true"
android:layout_centerHorizontal="true"
android:layout_marginBottom="45dp" />
</RelativeLayout>
该函数总是返回最后一条记录,我相信问题出在这些代码行中。但我不明白它是如何运作的。
name,age,weight,height
Bob Barker,25,175,6ft 2in
Ted Kingston,28,163,5ft 10in
Mary Manson,27,140,5ft 6in
Sue Sommers,27,132,5ft 8in
Alice Toklas,24,124,5ft 6in
我想了解代码应该如何工作,以便我可以编辑它以便能够搜索多个参数。
原始代码:
matches = [self.records[index]
for index in self.lookup_tables[field].get(value, []) ]
return matches if matches else None
答案 0 :(得分:0)
变量value
将在以下if .. for ..
块中被覆盖:
field, value = kwargs.items()[0] # <--- `value` defined
...
if field not in self.lookup_tables:
for index, record in enumerate(self.records):
value = getattr(record, field) # <--- `value` overwritten
self.lookup_tables[field][value].append(index)
因此,value
指的是最后一条记录的值。您需要使用其他名称来防止这种覆盖。
if field not in self.lookup_tables:
for index, record in enumerate(self.records):
v = getattr(record, field)
self.lookup_tables[field][v].append(index)