所以,在我的代码中,我有一本字典,用于计算我之前不知道的项目:
if a_thing not in my_dict:
my_dict[a_thing] = 0
else:
my_dict[a_thing] += 1
显然,我无法增加一个尚不存在的值的条目。出于某种原因,我有一种感觉(在我仍然缺乏Python经验的大脑中)可能存在更多的Pythonic方法,例如,一些构造允许将表达式的结果分配给某个东西,如果不可能的话否则在一个声明中。
那么,Python中是否存在类似的内容?
答案 0 :(得分:5)
collections
来自>>> from collections import defaultdict
>>> d = defaultdict(int)
>>> d['a'] += 1
>>> d
defaultdict(<class 'int'>, {'a': 1})
>>> d['b'] += 1
>>> d['a'] += 1
>>> d
defaultdict(<class 'int'>, {'b': 1, 'a': 2})
,这看起来不错。请注意以下示例:
defaultdict
int
将采用一个表示初始值的参数。在这种情况下,您正在递增整数值,因此您需要>>> d = Counter(['a', 'b', 'a', 'c', 'a', 'b', 'c'])
>>> d
Counter({'a': 3, 'c': 2, 'b': 2})
。
或者,既然您正在计算项目,您也可以(如评论中所述)使用defaultdict,这将最终为您完成所有工作:
most_common
它还带有一些不错的奖金。像>>> d.most_common()
[('a', 3), ('c', 2), ('b', 2)]
:
<TextView
android:text="Enter your first number"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:id="@+id/textView2"
android:textSize="20sp" />
<EditText
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:inputType="textPersonName"
android:ems="10"
android:layout_marginTop="12dp"
android:id="@+id/txtfno"
android:layout_below="@+id/textView2"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true" />
<TextView
android:text="Enter your second number"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/textView3"
android:textSize="20sp"
android:layout_below="@+id/txtfno"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:layout_marginTop="16dp" />
<EditText
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:inputType="textPersonName"
android:ems="10"
android:layout_below="@+id/textView3"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:layout_marginTop="17dp"
android:id="@+id/txtsno" />
<TextView
android:text="Answer:"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/txtsno"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:layout_marginTop="13dp"
android:id="@+id/result"
android:textSize="20sp" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignBottom="@+id/result"
android:layout_toRightOf="@+id/result"
android:layout_toEndOf="@+id/result"
android:layout_marginLeft="15dp"
android:layout_marginStart="15dp"
android:id="@+id/txtresult"
android:textSize="20sp" />
<LinearLayout
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_below="@+id/result"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:layout_marginTop="38dp">
<Button
android:text="+"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/button6"
android:layout_weight="1"
android:onClick="calc"/>
<Button
android:text="-"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/button7"
android:layout_weight="1"
android:onClick="calc"/>
<Button
android:text="*"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/button5"
android:layout_weight="1"
android:onClick="calc"/>
<Button
android:text="/"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/button8"
android:layout_weight="1"
android:onClick="calc"/>
</LinearLayout>
</RelativeLayout>
现在您有订单给您最常见的计数。
答案 1 :(得分:1)
使用get
方法
>>> d = {}
>>> d['a'] = d.get('a', 0) + 1
>>> d
{'a': 1}
>>> d['b'] = d.get('b', 2) + 1
>>> d
{'b': 3, 'a': 1}